home *** CD-ROM | disk | FTP | other *** search
/ Risc World 3 / Risc World 3.iso / SOFTWARE / ISSUE4 / POWERBASE / OPRO / Manual (.txt) < prev    next >
Ovation Pro Document  |  2001-12-06  |  630KB  |  7,225 lines

  1. OvationPro
  2. (21-Sep-00)
  3. Generic
  4. Black
  5. White
  6. Transparent
  7. Green
  8. Magenta
  9. Yellow
  10. Registration
  11. RGB000000
  12. RGBFFFFFF
  13. Trinity.Medium.Italic
  14. System.Fixed
  15. Trinity.Bold.Italic
  16. Homerton.Bold
  17. Homerton.Bold.Oblique
  18. Homerton.Medium
  19. Trinity.Medium
  20. Trinity.Bold
  21. Corpus.Medium
  22. BodyText
  23. Main Heading
  24. Sub-Heading
  25. 1in indent
  26. Hanging indent
  27. Contents2
  28. For indexing
  29. Effect17
  30. Sub-SubHeading
  31. Effect22
  32. Page number
  33. Corpus.Medium
  34. HalfSpace
  35. Effect663
  36. Centre
  37. Homerton.Medium
  38. NoGap
  39. SubSubSub
  40. Justify
  41. Contents0
  42. Contents1
  43. Trinity.Medium
  44. Effect946
  45. Effect724
  46. Index
  47. Footnote
  48. Italic
  49. Index layout
  50. Effect12945
  51. System.Fixed
  52. Effect12948
  53. Underline
  54. Effect417
  55. Effect429
  56. Effect435
  57. /Wh3M
  58. HtI", 
  59. sh"< 
  60. _A&X!
  61. EH*D"
  62. ME.H#
  63. :;9(&
  64. NS~9P&
  65. Z&$<@'
  66. ,B><(
  67. {filename} P{pagenumber} {datetime}
  68. DrawPlus    
  69. Database for Acorn computers with RISC OS 3.1 or later
  70.  Derek and Steven Haslam
  71. Manual revised May 2001 to comply with v. 8.05 of 
  72. Powerbase
  73. Database for Acorn computers with RISC OS 3.1 or later
  74.  Derek and Steven Haslam
  75. Manual revised May 2001 to comply with v. 8.05 of 
  76. Powerbase
  77. Contents
  78. Ch 1 
  79.  Introduction to Powerbase
  80. Description and installation
  81. 1.1.1
  82. Hardware requirements
  83. 1.1.2
  84. Installation
  85. 1.1.3
  86. Disclaimer
  87. Starting and ending a work session
  88. 1.2.1
  89. Loading Powerbase
  90. 1.2.2
  91. Opening a database
  92. 1.2.3
  93. Closing a database
  94. 1.2.4
  95. Quitting Powerbase
  96. Obtaining help
  97. 1.3.1
  98. Using the Acorn Help application
  99. 1.3.2
  100. Using the Helpreader text
  101. Ch 2 
  102.  Browsing and Editing
  103. Subfiles, record numbers and keys
  104. 2.1.1
  105. Subfiles
  106. 2.1.2
  107. Record numbers
  108. 2.1.3
  109. Moving about the database
  110. 2.2.1
  111. Browsing
  112. 2.2.2
  113. Moving to related records
  114. 2.2.3
  115. Changing keys
  116. 2.2.4
  117. Changing subfiles
  118. 2.2.5
  119. Using more than one subfile
  120. 2.2.6
  121. Naming subfiles
  122. Searching for a record
  123. 2.3.1
  124. Searching by key
  125. 2.3.2
  126. Searching by record number
  127. 2.3.3
  128. Searching by filter
  129. Editing the database 
  130.  fundamental operations
  131. 2.4.1
  132. Adding new records
  133. 2.4.2
  134. Deleting records
  135. 2.4.3
  136. Altering existing records
  137. 2.4.4
  138. Undoing mistakes
  139. Editing the database 
  140.  special features
  141. 2.5.1
  142. Using a template
  143. 2.5.2
  144. Copying fields
  145. 2.5.3
  146. Copying an entire record
  147. 2.5.4
  148. Choosing the field where editing starts
  149. 2.5.5
  150. Changing many records at once
  151. 2.5.6
  152. Moving or deleting many records at once
  153. 2.5.7
  154. Hiding sensitive data
  155. External fields
  156. 2.6.1
  157. Linking files to the fields
  158. 2.6.2
  159. Editing External fields
  160. 2.6.3
  161. Clearing and exporting field contents
  162. 2.6.4
  163. Editing scrollable lists
  164. Ch 3 
  165.  Printing from the Database
  166. Output destination
  167. 3.1.1
  168. The Window destination
  169. 3.1.2
  170. The File destination 
  171. 3.1.3
  172. The Printer destination
  173. Print formats
  174. 3.2.1
  175. Horizontal
  176. 3.2.2
  177. Vertical   
  178. 3.2.3
  179. Table
  180. 3.2.4
  181. Label
  182. What types of field can be printed?
  183. Specifying which fields to print
  184. 3.4.1
  185. Saving print selection files
  186. 3.4.2
  187. Default selection
  188. Specifying which records to print
  189. 3.5.1
  190. The construction of search formulae
  191. 3.5.2
  192. Numeric and other special fields in search formulae
  193. 3.5.3
  194. Using 
  195. wild-cards
  196.  in search formulae
  197. 3.5.4
  198. Comparing the contents of two fields
  199. 3.5.5
  200. Saving search formulae for re-use
  201. Query by example
  202. 3.6.1
  203. What is QBE?
  204. 3.6.2
  205. QBE vs SF
  206. Other features of the Query panel and Match window
  207. 3.7.1
  208. Printing records from more than one subfile
  209. 3.7.2
  210. Including record number, key and subfile number
  211. Marking records for inclusion or exclusion
  212. 3.8.1
  213. Single records
  214. 3.8.2
  215. Groups of records
  216. Printing single records
  217. The Print options window
  218. 3.10.1 Saving print options files
  219. Field analysis reports
  220. Subsidiary indices and printing speed
  221. Ch 4 
  222.  Creating a New Database
  223. Creating the database application shell
  224. Designing the record layout
  225. 4.2.1
  226. Simple field creation
  227. 4.2.2
  228. Deleting, inserting and re-ordering fields.
  229. 4.2.3
  230. Moving and re-sizing the bounding box
  231. 4.2.4
  232. More about tags and descriptors
  233. 4.2.5
  234. Other types of Editable field
  235. 4.2.6
  236. Scrollable lists
  237. 4.2.7
  238. Check-box fields
  239. 4.2.8
  240. External fields
  241. 4.2.9
  242. Computed fields
  243. 4.2.10 Stamp fields
  244. 4.2.11 Button fields
  245. 4.2.12 Mandatory fields
  246. A short-cut to a working database
  247. Specifying the database size
  248. Specifying the primary key
  249. 4.5.1
  250. General procedure
  251. 4.5.2
  252. Some illustrative examples
  253. 4.5.3
  254. Using more than one field in a key
  255. 4.5.4
  256. Other matters concerning keys
  257. Building the empty database
  258. Renaming a database
  259. Ch 5 
  260.  Input Validation and Validation Tables
  261. Character validation
  262. Validation tables
  263. Creating a validation table
  264. Linking tables to fields
  265. 5.4.1
  266. The Replace on entry feature
  267. 5.4.2
  268. When to turn off the Exact match switch
  269. Displaying validation tables
  270. The validation table menu
  271. Loading validation tables
  272. Including validation table data in printouts
  273. Entering validation table data into a record
  274. Ch 6 
  275.  Performing Calculations
  276. Calculated fields
  277. 6.1.1
  278. Simple calculations using Numeric fields
  279. 6.1.2
  280. Making calculations retrospective
  281. 6.1.3
  282. Calculations using non-numeric fields (!)
  283. 6.1.4
  284. Calculations involving times
  285. 6.1.5
  286. Calculations involving dates
  287. Composite fields
  288. User functions
  289. Calculations on a column of a report
  290. Ch 7 
  291.  Using extra indices
  292. Indexing a field
  293. Automatic saving of indices
  294. Ch 8 
  295.  Using CSV files
  296. What are CSV files?
  297. Setting the CSV options
  298. Exporting data as a CSV file
  299. 8.3.1
  300. Scrollable lists and CSV files
  301. Using CSV files to import data
  302. 8.4.1
  303. Ensuring that the correct options are selected
  304. 8.4.2
  305. Directing imported data to the correct fields
  306. 8.4.3
  307. Importing data from plain text files
  308. 8.4.4
  309. What if the imported data won
  310. t fit?
  311. Using CSV files to modify existing records
  312. Creating a new, working database from a CSV file
  313. Ch 9 
  314.  Mail-Merging with Impression and Ovation
  315. Mail-merging with Ovation*
  316. 9.1.1
  317. Preparing an Ovation document for mail-merging
  318. 9.1.2
  319. Merging the data from Powerbase
  320. Mail-merging with Impression
  321. 9.2.1
  322. Preparing the Impression document
  323. 9.2.2
  324. Merging the data
  325. Mail-merging with other programs
  326. Ch 10 
  327.  Utilities
  328. Changing the Primary Key
  329. Adjusting the record format
  330. Changing the record format
  331. Merging two databases
  332. Changing the Database Length
  333. Inspecting and balancing index trees
  334. Finding duplicate primary keys
  335. Ch 11 
  336.  Passwords and related matters
  337. Levels of protection
  338. 11.1.1 Individual I.D.s and passwords
  339. Options selected from the password-setting window
  340. 11.2.1 Duplicate primary keys
  341. Logging database changes
  342. Ch 12 
  343.  Script Files
  344. Ch 13 
  345.  Subset databases
  346. Creating a subset
  347. Using a subset to shorten a database
  348. Ch 14 
  349.  Customising Powerbase
  350. Overall control of the database
  351. Defining the function keys
  352. CSV options
  353. Preferences
  354. 14.4.1 Separators in date and time fields
  355. 14.4.2 Wild-cards
  356. 14.4.3 Option switches
  357. 14.4.4 Save indices (Default: Manual)
  358. 14.4.5 Start editing at
  359. 14.4.6 Application for ImpulseII data-merging
  360. 14.4.7 Save choices
  361. Colours of key fields and table-linked fields
  362. Config files
  363. 14.6.1 Pathnames for External file objects
  364. The Messages file
  365. Appendix A 
  366.  Powerbase as an Impulse server
  367. Description:
  368. Appendix B 
  369.  Keystroke equivalents
  370. Index
  371. Ch 1 
  372.  Introduction to 
  373. Powerbase
  374. Description and installation
  375. Powerbase
  376.  is a flat-file database management system for use with Acorn 32-bit RISC computers. Versions from 6.xx onward are only usable with RISC OS 3.1 or later.  If you are using RISC OS 2 you will require a different version of 
  377. Powerbase
  378.  which has a version number of the type 5.xx.  Many of the features described in this manual are not present in that version of 
  379. Powerbase
  380.  but appropriate documentation in the form of text-files can be provided.  This manual was fully revised in December 2000 to comply with v. 8.00 of 
  381. Powerbase
  382.  and users (other than RISC OS 2 users) of earlier versions are strongly advised to upgrade to this version, which incorporates many new features and is fully compatible with StrongArm and RISC OS 4.02.  The software, documentation and sample databases may be downloaded from our website at 
  383. www.pendle.ukgateway.net/
  384. Powerbase, versions and compatibility
  385. 1.1.1
  386. Hardware requirements
  387. It is quite feasible to use 
  388. Powerbase
  389.  on a 1Mb machine with a single floppy disc drive and, if your database runs to only a few hundred short records (e.g. an address-book), you might find such a system quite adequate for your needs.  You will, however, find report creation rather slow when working from a floppy disc and a hard disc is strongly recommended, even for a small database; for large databases it is essential.  If you have to work from floppies try to allocate enough memory to the 
  390. RAM disc
  391.  to copy the whole database onto it before you start work. This will speed up searches and reports enormously.
  392. 1.1.2
  393. Installation
  394. Installing Powerbase
  395. Most users will receive 
  396. Powerbase
  397.  in the form of an 
  398. ArcFS 
  399. archive. You are advised not to run the program directly from the archive (although that is possible) but to de-archive it as follows. Run the supplied read-only version of 
  400. ArcFS 
  401. and double-click on the 
  402. Powerbase 
  403. archive. The archive will open to reveal the 
  404. !Powerbase
  405.  application which should be dragged to a suitable directory window. It is suggested that you also, by the same method, de-archive the sample databases e.g. 
  406. !Elements, !Boxes, !Friends
  407.  from the 
  408. Examples
  409.  archive if you intend to experiment with them or work through either of the tutorials.  The tutorials are provided in a separate booklet. If databases are completely new to you we recommend you to work thought the 
  410. Quick Tutorial
  411. which is based on the simple address-book database 
  412. !Friends.
  413.   If you are somewhat more experienced but are using 
  414. Powerbase
  415.  for the first time you will probably find 
  416. Tutorial
  417. , using the 
  418. !Elements
  419.  database, more appropriate.
  420. 1.1.3
  421. Disclaimer
  422. No warranty, express or implied, is made about the suitability of 
  423. Powerbase 
  424. for any purpose. We cannot be 
  425. held responsible for any loss or damage  due to the use of this software.  All enquiries, requests for upgrades etc, should be directed to:
  426. Powerbase support
  427. 112, Keighley Road
  428. Colne
  429. Lancashire
  430. BB8 0PH
  431. Tel:      (01282) 866835
  432. email:  quercus@ukgateway.net
  433. email address for Powerbase Support
  434. website:  www.pendle.ukgateway.net/
  435. When requesting an upgrade please enclose four first-class stamps.
  436. website for information & upgrades
  437. Starting and ending a work session
  438. 1.2.1
  439. Loading 
  440. Powerbase
  441. Double-click on the 
  442. Powerbase
  443.  icon in a directory window and the program will load and place its icon on the iconbar.  The words 
  444. No data
  445.  will appear under the icon indicating that no database is open yet.
  446. 1.2.2
  447. Opening a database
  448. A database may be opened for use by either of the following methods:
  449. Dragging the database icon onto the 
  450. Powerbase 
  451. icon on the iconbar.  
  452. Double-clicking on the database icon.  This is the more usual method and may be used even if 
  453. Powerbase
  454.  is not already loaded, as long as it has been 
  455.  by the filer.
  456. Whether you get immediate access to the database depends on whether or not it is 
  457. password
  458.  protected.  If no 
  459. password
  460. s have been defined (as is the case with all the sample databases on the distribution disc) the main record window will open and the name of the database will appear under the 
  461. Powerbase
  462.  icon.
  463. password
  464. -protected database will display the Access window in the middle of the screen requesting you to enter a 
  465. password
  466.  and perhaps even a personal user I.D. as well.  The window has an 
  467.  button which should be clicked with SELECT when you have entered the required information.  There is also a 
  468. Cancel
  469.  button which removes the window from the screen without further action.  Passwords and I.D.s are case-sensitive and, if incorrectly entered, result in either a 
  470. Password not known
  471. Access denied
  472.  message.  After three successive incorrect entries 
  473. Powerbase
  474.  will close down and remove itself from the iconbar.
  475. 1.2.3
  476. Closing a database
  477. There are three ways of closing a database:
  478. Open another database, either by double-clicking or dragging to the 
  479. Powerbase
  480.  icon. 
  481. Choose 
  482.  from 
  483. Powerbase's
  484.  iconbar menu. This also quits 
  485. Powerbase
  486.  itself.
  487. Choose 
  488. Close database
  489.  from the iconbar menu.  This still leaves the 
  490. Powerbase
  491.  application running.  The wording underneath reverts to 
  492. No data
  493. If you have made any change to the database while it was open the disc will be automatically updated so that your changes are not lost, regardless of which of the above three methods of closure is used.
  494. 1.2.4
  495. Quitting 
  496. Powerbase
  497. Choose 
  498.  from the iconbar menu. You need not specifically close your database first; any changes made to it will be saved before 
  499. Powerbase
  500.  quits.
  501. Obtaining help
  502. 1.3.1
  503. Using the Acorn 
  504.  application
  505. When you are first becoming acquainted with 
  506. Powerbase
  507.  you may find it useful to load Acorn
  508.  application (from 
  509.  on the iconbar). Resize the Help window, if you wish, and move it to some convenient place on the screen. Moving the mouse pointer over the various windows, icons and many of the menus displayed by 
  510. Powerbase
  511.  will then give a brief description of the purpose of each.
  512. 1.3.2
  513. Using the 
  514. Helpreader
  515.  text
  516. Further help is available from the 
  517.  option which appears on both the main menu and the iconbar menu. Choosing this option displays a text file which you can 
  518. navigate
  519.  by means of small orange buttons included in the text. Clicking with SELECT on such a button takes you directly to the part of the text referred to. Double-clicking with ADJUST takes you back to where you were when you last clicked on a button.
  520. Clicking MENU over the text window displays a menu giving an alternative means of access to specific parts of the text. The text has deliberately been kept fairly short and is in no way a substitute for this manual; it is intended to provide basic information only.
  521. Help available within Powerbase
  522. :    ~P@
  523. @|    ~P@
  524. There is one circumstance where this is not entirely possible and that is when you are running a database from the 
  525. RAM disc
  526. . Switching off the computer or quitting the 
  527. RAM disc
  528.  will, of course, result in loss of data. When you close a database on the 
  529. RAM disc
  530.  therefore,  
  531. Powerbase
  532. will warn you to back it up to a more permanent medium.
  533.  Thanks are due to Ben Summers who wrote the 
  534. Helpreader 
  535. application used to crea
  536. te and display this text file and who kindly gave permission for it to be distributed with 
  537. Powerbase
  538. Ch 2 
  539.  Browsing and Editing
  540. When you open a database you will normally see two windows. The 
  541. record window
  542. displays one data 
  543. record 
  544. at a time. Each item of data in the record occupies a rectangle called a 
  545. field
  546. keypad
  547.  contains buttons for moving around the database, adding and deleting records, searching for records etc. It may be toggled between full size and a display of the first two rows of buttons only. You can also suppress the keypad and put some or all of its buttons on the record window itself (see 
  548. 4.2.11
  549. ).  The sample database 
  550. Boxes
  551.  illustrates this.  In this chapter we will assume that you are using the keypad.
  552. Both windows may be moved to whatever position on the screen you find most convenient and the record window may be re-sized.  When you close the database the position of the keypad and the position and size of the record window are stored so that they will look the same next time you open the database.
  553. Most of the keypad functions have keystroke equivalents provided by the numbered 
  554. function keys
  555. F11) and experienced users might want to use these instead of the mouse. The relevant 
  556. keystroke
  557. s are given in the text where appropriate but note that these are default values and may be redefined if so desired. Many other actions have equivalent Ctrl sequences which can
  558. t be redefined.  See 
  559. Appendix B 
  560. for a complete list.
  561. Subfiles
  562. record numbers
  563.  and 
  564. Look at the title-bar of the record window. Three pieces of information are displayed; the 
  565. subfile number
  566. , the 
  567. record number
  568.  and the 
  569. of the record.  Since we will make frequent reference to these three terms it will be as well to explain at the outset what each one means. 
  570. Subfiles, explanation of
  571. 2.1.1
  572. Subfiles
  573. Suppose you have a bookshelf, capable of holding 100 books, and six partitions, numbered 0
  574. 5, which you can use to divide it into sections.  The partitions are, to begin with, all stacked together at the left-hand end of the shelf. You may leave them like this if you wish and fill up the shelf with an unbroken run of 100 books. If, however, the books fall into well defined categories you might prefer to use the partitions to divide the shelf up into sections. There are no restrictions on where you can place the partitions, or how many books can fall into each section of shelf, so long as you don
  575. t exceed a total of 100 books.
  576. In a similar way every 
  577. Powerbase
  578.  database is able to use up to six subfiles numbered 0-5. When you open the database you are looking at subfile 0 and you might have no occasion to bother with the others at all, in which case they can be ignored. Like the bookshelf partitions subfiles are there for you to use or not use depending on what your requirements are.  The database remains the same size whether you use one subfile or all six and the number of records in a subfile is limited only by the defined size of the database.
  579. Section 
  580. 2.2.4 
  581. suggests instances in which you might find it advantageous to use more than one subfile.
  582. 2.1.2
  583. Record numbers
  584. Every record in the database has a number which specifies its position in a file called 
  585. Database
  586. . As you step through the records (see 
  587. ) you will probably find that the record numbers shown in the title-bar look quite random.  Record numbers reflect the order in which records were originally entered into the database, not the order in which you see them while browsing. The latter is determined by the 
  588. key. 
  589. Database file
  590. 2.1.3
  591. key, explanation of
  592. A key is a group of letters or other characters derived from one or more of the data fields in a record and used to identify that record.  The record number identifies the record in a sense, of course, but record numbers are of limited use because they only reflect the order in which the records were entered.  Keys, on the other hand, are derived from the actual data and are stored in a special table called an 
  593. index
  594. .  The keys in the 
  595. index
  596.  are 
  597. ordered
  598. , either alphabetically or numerically and can therefore be used to examine the records in an order which is related to the data.  To use an analogy with books again, you can look up a key in an index and the index tells 
  599. Powerbase 
  600. what 
  601.  it is on, i.e what is the number of the record to display.
  602. A database may have several indices built from keys based on different fields in the record but there 
  603.  be at least one which we call the 
  604. primary key
  605.  index
  606. . When you come to create a database of your own you will find that 
  607. Powerbase
  608.  insists that you define the 
  609. primary key
  610.  before you can use the database.
  611.  Subsidiary keys
  612.  may be defined at any time; whether you use them or not is up to you. 
  613. Look at the 
  614. field
  615.  and at the key itself in the title-bar and you will see that the two are related. You can recognize the key field on which the currently-active key is based by its 
  616. descriptor 
  617. (label) which will be red.
  618.  Key fields for other keys have blue descriptors. Non-key fields have black descriptors. The 
  619. primary key
  620.  field is further identified by the background colour of the data rectangle which is pale yellow instead of white like the other data fields.
  621. Colours used to identify key fields
  622. Moving about the database
  623. 2.2.1
  624. Browsing
  625. Six buttons on the top row of the 
  626. keypad
  627.  move you about within the current subfile. From left to right their actions when clicked on with SELECT are:
  628.              
  629.             
  630. Keystroke equivalent
  631. First record   
  632. Ctrl F1
  633. First record button
  634.        
  635. Previous record
  636.       
  637. Previous record button
  638. 10 records back 
  639. Fast rewind
  640. Shift F1
  641. Fast rewind button
  642. Rewind button
  643.         
  644. 10 records forward 
  645. Fast forward
  646. Shift F2
  647. Fast forward button
  648.         
  649. Next record
  650. Next record button
  651.        
  652. Final record  
  653. Ctrl F2
  654. Final record button
  655. The number of records forward or back for actions (3) and (4) is determined by the number (
  656. Fast forward
  657.  interval) in the writable icon between the associated 
  658. keypad
  659.  buttons. The terms first, previous, back, forward, next and final refer to the order of records as determined by the 
  660.  in the 
  661. index
  662. . The file 
  663. wraps around
  664.  so after the final record clicking the 
  665. Next record
  666.  button takes you to the first record. If you display the first record, clicking the 
  667. Previous record
  668.  button takes you to the final one. In accordance with RISC OS conventions clicking with ADJUST instead of SELECT reverses these actions so that ADJUST over the 
  669. Next record
  670.  button, for instance, takes you to the previous record rather than the next. This allows you to move about the database with fewer movements of the mouse. 
  671. Stop button
  672. Play button
  673. Fast forward interval
  674. The buttons at the start and end of the second 
  675. keypad
  676.  row resemble the 
  677. Play 
  678. Stop 
  679. button
  680. s of a tape or video recorder and it will be convenient to refer to them by these names. 
  681. Play (F11
  682. ) causes 
  683. Powerbase
  684.  to run through the records, displaying each one briefly, and 
  685. Stop (Shift F11
  686. ) halts the process. Closing the record window has the same effect as 
  687. .  If 
  688. Play 
  689. is clicked with SELECT records are displayed in forward order.  Using ADJUST displays them in reverse order. You may swap the order at any time by a further click on 
  690. . The time for which each record remains on screen may be altered by changing the 
  691. Fast forward
  692.  interval (see above); the larger number you type into this icon the longer each record will remain on screen.  
  693. At the bottom of the keypad are four 
  694. bookmark
  695.  icons which let you mark specific records for rapid retrieval. Click on one with SELECT  and the number of the current record appears in the icon.  Clicking with SELECT on a 
  696. bookmark
  697.  icon which contains a record number will return you to that record.  Click with ADJUST to clear the marker.
  698. Lookup function
  699. Related records, accessing
  700. 2.2.2
  701. Moving 
  702. to related records
  703. If you Shift/double-click on a field with SELECT, and the contents of the field match the current key of another record, that record will be displayed. We call this the lookup function. It will also work if a field contains a comma separated list of keys. Shift/double-click on any one of these keys takes you to the relevant record. You could experiment with this using the 
  704. Elements
  705.  database. Look up, say, SODIUM, enter in one of the 
  706. Notes
  707.  fields the primary keys of the other Group 1 metals, i.e. lith,pota,rubi,caes,fran. You can now access the records of these five elements from SODIUM
  708. s record.
  709. 2.2.3
  710. Changing keys
  711. Two buttons in the middle of the second row of the 
  712. keypad
  713.  bear a symbol resembling a key. They enable you to cycle through the available 
  714. indices
  715.  in opposite directions (
  716. Shift F4
  717.  and 
  718. Shift F5
  719.  respectively). ADJUST, as usual, reverses the action of SELECT and 
  720. wrap around
  721.  again applies. If no 
  722. subsidiary indices
  723.  have been defined these buttons will have no effect.
  724. Next key button
  725. Previous key button
  726. 2.2.4
  727. Changing subfiles
  728. Three buttons in the centre of the third row of the 
  729. keypad
  730.  have the following effect when clicked with SELECT:
  731. Go to previous subfile
  732. Previous subfile button
  733.             
  734. Rotate subfiles
  735. Ctrl F4
  736. Rotate subfiles button
  737. Subfile rotation
  738.               
  739. Go to next subfile   
  740. Next subfile button
  741. (1) and (3) change the current subfile to the previous one in sequence and the next in sequence respectively. As with the corresponding buttons for moving from record to record and key to key 
  742. Next subfile 
  743. from subfile 5 takes you to subfile 0 and 
  744. Previous subfile 
  745. from 0 takes you to 5. ADJUST reverses these actions. 
  746. Rotate
  747.  renumbers the 
  748. subfiles
  749.  so that subfile 0 becomes 1, subfile 1 becomes 2 etc.  Subfile 5 becomes 0. Records which were previously in, for example, subfile 2 will then be found in subfile 3. As this is quite a drastic change you will be asked to confirm that it
  750. s what you really want before 
  751. Powerbase
  752.  proceeds. 
  753. 2.2.5
  754. Using more than one subfile
  755. Multiple subfiles, use of
  756. Powerbase
  757.  database consists, as stated earlier, of six 
  758. subfiles
  759.  numbered 0-5. You may use subfile 0 (which is the one used by default) and ignore the others if you wish, but there are occasions when users might find two or more 
  760. subfiles
  761.  very useful. If, for example, you are maintaining a set of pupil records in a school you could assign one subfile to each year. At the end of a school year the promotion of Year 1 pupils to Year 2, Year 2 to Year 3 etc can be brought about by a single click on the 
  762. Rotate 
  763. button
  764. . (In an 11-16 school this would put the leavers into subfile 0, from which they could later be removed.)
  765. A more common use of 
  766. subfiles
  767.  is to use subfile 0 to hold the in-use records and subfile 1 as a dumping ground for records which you want out of the way but don
  768. t want to lose permanently. 
  769. Powerbase
  770.  is actually used in this way in a Further Education college where the applications file for a course is built up in subfile 0. On enrolment day records are updated to reflect students
  771.  subject choices and all the records for applicants who have not appeared are moved into subfile 1. The enrolled students in subfile 0 are then timetabled and class lists are printed. During the first week of the course there is a trickle of late enrolments which simply involve retrieving the required records from subfile 1 and reinstating them in subfile 0. 
  772. The facilities for moving records, singly or in batches, from one subfile to another are described in 
  773. 2.4.2 
  774. 2.5.6
  775. . You can, of course, also select a subfile and type new records directly into it.
  776. 2.2.6
  777. Naming subfiles
  778. Subfiles, naming
  779. To give subfiles meaningful names click MENU over the record window and go to the 
  780. Miscellaneous
  781.  submenu.  From there 
  782. Name subfile
  783.  leads to a writable menu item into which you may type a name of up to 20 characters. This then becomes the name of the current subfile and will be saved on closing the database.
  784. Searching
  785.  for a record
  786. s all very well being able to move about the database like flipping through the pages of a book but how do we find a specific record?  
  787. Powerbase
  788.  provides three ways of doing this: you can search for the record by 
  789. , by 
  790. record number
  791.  or by using a 
  792. filter
  793. 2.3.1
  794. Searching by key
  795. Records, retrieving by key
  796. The icon bearing a record card and a question mark is the 
  797. Searc
  798. h button
  799. ). When clicked with SELECT  the Search window opens to the right of the 
  800. keypad
  801. . Type the key of the required record into the writable icon and click on the 
  802. Find 
  803. button
  804. or type Return. To see how the key is constructed from the 
  805. key field
  806.  click MENU over the 
  807. record window
  808.  and choose 
  809. Index => Show details 
  810. Ctrl K
  811. ). This displays a window describing the 
  812. key structure of the currently-active index
  813. If the key exists in the 
  814. index
  815.  the record will be found and displayed. If the key doesn
  816. t exist 
  817. Powerbase
  818.  beeps and displays the nearest matching record with the 
  819. key field
  820. flashing
  821. . If the database is a small one with 
  822.  which differ greatly from record to record then the displayed record may not look to be very near at all.  If you typed Return or used SELECT on the 
  823. Find 
  824. button the 
  825. Search window
  826.  will be closed. If you want to search repeatedly it is more convenient to have the window stay on screen and this can be achieved by clicking on 
  827. Find 
  828. with ADJUST. If you do this you will notice that the icon above the 
  829. Find 
  830. button displays the number of 
  831. matches found
  832. Clicking on the 
  833.  icons (the up and down arrowheads) in the Search window allows you to search an index other than the current one. The index used affects the search only; clicking the 
  834. browse
  835.  buttons on the keypad will show you that the current index has not been changed.
  836. A search carried out as described looks only at the current subfile. If you suspect that the record you require might be lurking in some other subfile you can force all six to be searched. This can be achieved by using ADJUST (
  837. Shift F8
  838. ) instead of SELECT on the keypad 
  839. Search 
  840. button. When the 
  841. Search window
  842.  appears you will see that the 
  843. subfiles
  844.  radio button is selected instead of 
  845. This subfile
  846. . The radio buttons enable you to change your mind after the window has been opened.
  847. Records, searching all subfiles for
  848. searching
  849.  on a numeric key you must enter a number of exactly the right value. If, however, the key is alphabetic you may use just the first few letters if they are sufficient to distinguish the key from others.
  850. There are two other buttons on the 
  851. Search window
  852. restores the last key entered into the writable icon and 
  853. Cancel 
  854. simply removes the window from the screen without further action.
  855. 2.3.2
  856. Searching by record number
  857. Records, retrieving by record number
  858. You may type a record number, preceded by # (e.g. #1054), in the Search window instead of a key. Provided the record is in use 
  859. Powerbase
  860.  will find and display it, regardless of which subfile it is in. Bear in mind that, if the record is found in some other subfile than the current one, that subfile will 
  861. become
  862.  the current one. If the record has been deleted or has never been assigned a 
  863. Record #xxx is not in use
  864.  message is displayed. 
  865. 2.3.3
  866. Searching by filter
  867. Records, filtering
  868. Filter
  869. switch (
  870. Ctrl F8
  871. ) is in the middle of the last row on the 
  872. keypad
  873. . Selecting it brings up the 
  874. Filter
  875.  window which contains a writable icon into which you can type a 
  876. search formula
  877.  (see 
  878. ).  You should then click on the 
  879. Filter
  880. button 
  881. in the 
  882. Filter
  883.  window
  884.  or, alternatively, type Return. The 
  885. keypad
  886.  buttons used for browsing will now only display records which match the 
  887. search formula
  888. , all non-matching records being 
  889. filter
  890. ed out. Deselecting the 
  891. Filter
  892. switch closes the Filter window and restores normal 
  893. keypad
  894.  operation.  So does clicking 
  895. Cancel
  896.  on the Filter window. The 
  897. Close
  898.  button simply closes the Filter window but leaves the filter in effect 
  899.  useful if you want the window out of the way once you
  900. ve set up a filter.
  901. Editing the database 
  902.  fundamental operations
  903. 2.4.1
  904. Adding new records
  905. The icon bearing a record card and a plus sign is the 
  906. Add record
  907.  button
  908. ). Clicking with SELECT displays a blank record for you to fill in. The subfile number and anticipated record number are shown in the title-bar of the 
  909. record window
  910.  but there is, of course, no key as yet because there is no data. The title-bar therefore reads 
  911. (New)
  912.  in the place where the key normally appears.  In most databases you may leave blank any fields except the primary key field.
  913. Powerbase
  914.  does, however, allow other fields to be defined as 
  915. mandatory fields
  916. . If the database contains such fields (which normally have red as their foreground colour) you will be told about them when you try to move to another record or close the database and will be unable to do so until you fill them in. You might also find that on some fields pressing certain keys has no effect. This will happen, for example, if you try to type letters into a field which has been defined as Numeric.
  917. If you type into a field whose text and border are dark green you may get an error message. These fields only accept certain values which are listed in a 
  918. validation table
  919.  (see 
  920. ). To see what these values are make sure the caret is in the relevant field then click on the 
  921. List values
  922.  button
  923.  on the 
  924. keypad
  925. After entering data into a field you can go to the next field in sequence by typing either the Return or the down-arrow key
  926. . To go back one field use the up-arrow key
  927. . These arrow keys work in such a way that attempting to go beyond the last field of the record takes you to the first field and attempting to go back from the first field takes you to the last. Typing Return on the last field of a record acts rather differently in that it writes the record to disc and brings up a new blank record for editing, i.e. it duplicates the action of the 
  928. Add record
  929.  button
  930.  on the 
  931. keypad
  932. . You can, in addition, place the caret in any editable field by clicking with SELECT. 
  933. Arrow keys, action when editing
  934. When you have entered as much of a record as you wish you can click 
  935. Add record
  936.  again for another blank record. The record you have just entered is automatically written to the database. The same is true if you click on any other 
  937. keypad
  938.  button or close the database altogether. You don
  939. t need to use the 
  940. Force update
  941. ) button to tell 
  942. Powerbase 
  943. to write the record.  The real purpose of this button is to make 
  944. Powerbase
  945.  save 
  946. indices
  947.  and 
  948. validation table
  949. s which are stored in memory. Occasional use of the button during a long working session guards against power cuts or system failure.
  950. 2.4.2
  951. Deleting records
  952. The fourth row of the 
  953. keypad
  954.  has only three buttons, the middle one of which suggests putting an index card in a dustbin.  This is obviously the 
  955. Delete 
  956. button
  957. Ctrl F10
  958. ) but what are the others? The left button (
  959. ) moves the displayed record back one subfile, i.e. if the record is in subfile 1 it will be moved to subfile 0.  If it is in subfile 0 it will be moved into subfile 5 (
  960. wrap-around
  961.  again).  The right button (
  962. ) moves the record forward one subfile. A record in subfile 5 will be moved into subfile 0.  These buttons, which we will refer to as 
  963. Shift back
  964.  and 
  965. Shift forward
  966.  respectively, clearly don
  967. t delete records at all, except in the sense 
  968. delete 
  969. from the current subfile
  970. . We often want to get a record out of our way but keep open the option of bringing it back again and that
  971. s where these buttons are really useful. If you have a lot of records in subfile 0 and want to do a clear-out you can use subfile 1 as a dumping-ground for the unwanted records. You
  972. re not really deleting them: just removing them from the subfile you
  973. re working in.  
  974. It is sometimes useful when shifting a record, to be able to 
  975. follow
  976.  it into its new subfile. You can do so by holding down SHIFT while you click on the 
  977. Shift forward
  978. Shift back
  979.  button
  980. Shift forward button
  981. Delete 
  982. (dustbin) button should only be used when you are sure you want to lose the record permanently.  As this is quite a drastic action 
  983. Powerbase 
  984. will ask you to confirm it before the record actually disappears. Nervous users may prefer to leave this button strictly alone and do all their 
  985. deleting
  986.  with 
  987. Shift forward
  988. .  If this eventually results in a lot of clutter in the subfile next to the one you
  989. re using you can always do an occasional clear-out as described in 
  990. 2.5.7
  991. 2.4.3
  992. Altering existing records
  993. A displayed record may be altered manually without any restrictions other than those applying to the addition of new records (see 
  994. 2.4.1
  995. ). Alterations which would result in a change to the 
  996. primary key
  997.  must be confirmed. Normal RISC OS conventions for editing writable icons apply, e.g. 
  998. Ctrl U
  999.  clears the icon. As with new record entries you need do nothing to save your changes to disc. The process takes place automatically before a different record is displayed, when a database is closed or on quitting 
  1000. Powerbase
  1001. 2.4.4
  1002. Undoing mistakes
  1003. Changes to the record on-screen can be undone provided you haven
  1004. t clicked on 
  1005. Force update
  1006.  (not normally needed anyway) or done anything to cause 
  1007. Powerbase
  1008.  to display a different record. In other words, you can 
  1009.  changes made to the current record as long as it remains on the screen. You may either 
  1010.  the alterations made to the record or only those relating to specific fields.
  1011. Undo facilities
  1012. If you bring up the main menu and choose 
  1013.  changes
  1014.  the record will be returned to the state it was in when you displayed it and before you began to edit it. To restore an individual field, click MENU over the field then go to the 
  1015. Field
  1016.  submenu and choose 
  1017.  changes
  1018.  from there. Only ordinary writable fields and check boxes may be restored; you can
  1019. t restore 
  1020. External field
  1021. s (see 
  1022. ) which is why a warning is normally issued before deleting such fields.
  1023. Editing the database 
  1024.  special features
  1025. Section 
  1026.  described all the editing facilities you actually need in order to maintain your database. The features described in this section are not essential but they can save you time and make your use of the database more efficient.
  1027. 2.5.1
  1028. Using a template
  1029. Template, use in data-entry
  1030. You may want certain fields to be filled in with fixed contents on every new record to save typing the same thing every time and 
  1031. Powerbase
  1032.  provides a means of doing this. Call up the main menu, go to the 
  1033. Miscellaneous 
  1034. submenu and choose 
  1035. Edit template
  1036. . A blank record is displayed and the window title says 
  1037. Enter data which you wish to appear by default on new records
  1038. . Type in the required fixed data then click any of the usual keypad buttons. You will now find that the new record displayed every time you click 
  1039. Add record
  1040.  is no longer blank but already contains the data entered in your template. This feature affects 
  1041. records only; it doesn
  1042. t have a retrospective effect on existing records. 
  1043. fixed data on new records
  1044. 2.5.2
  1045. Copying fields
  1046. Fields, copying
  1047. The buttons at the far left and right of the third row of the 
  1048. keypad
  1049.  may be thought of as 
  1050. Copy 
  1051. to Clipboard
  1052. Ctrl C
  1053. ) and 
  1054. Paste
  1055.  from Clipboard
  1056. Ctrl V
  1057. ) respectively. They can save a lot of time when you want to copy data from one field into another. When you click SELECT on 
  1058. the contents of the field which owns the caret is stored in memory. Positioning the caret in another field and clicking on 
  1059. Paste 
  1060. will copy the stored data into the new field, erasing the field
  1061. s previous contents (if any). If the data is too long for the field it will be truncated. If there is nothing on the clipboard the corresponding data from the 
  1062. previously-displayed record
  1063.  will be copied to the field. 
  1064. Copy 
  1065. Paste
  1066. are not limited to copying into another field of the same record; you may use them to copy data between records or from a record into a 
  1067. validation table
  1068.  or a dialogue box or, indeed, between any two writable icons within 
  1069. Powerbase
  1070. . Data remains on the 
  1071. clipboard
  1072.  until you use 
  1073. Copy 
  1074. again.
  1075. If you  have highlighted fields using ADJUST as if for printing (see 
  1076. ) clicking SELECT on the 
  1077. Add record
  1078.  button displays the new record with all the highlighted data from the previously-displayed record already entered.  To prevent the accidental creation of unwanted records primary key fields are 
  1079.  copied in this way.  (Remember that a record will not be added to the database if the primary key field is blank.)
  1080. This is a suitable place to explain how 
  1081. Powerbase
  1082.  can also copy data to and from other applications by means of the global clipboard. The latter is a feature of RISC OS which few users seem to know about and not all applications use it. Here
  1083. s how it works. Highlight one or more fields with ADJUST as described above and make sure the caret is in the displayed record. It needn
  1084. t be in one of the highlighted fields; any field will do. Now type 
  1085. Ctrl Shift C
  1086. . Nothing appears to have happened but the highlighted data is now on the global clipboard. If you open, say, an 
  1087. Impression
  1088.  window, place the caret in it and type 
  1089. Ctrl V
  1090.  the data will be copied to 
  1091. Impression
  1092. Global clipboard, support for
  1093. If, on the other hand, you highlight data in 
  1094. Impression
  1095.  and type 
  1096. Ctrl C
  1097. , then place the caret in a 
  1098. Powerbase
  1099.  record and type 
  1100. Ctrl Shift V
  1101.  the data will be copied from 
  1102. Impression 
  1103. Powerbase
  1104. . The same method may be used to copy data from 
  1105. Powerbase
  1106. Writer, Easywriter 
  1107. Techwriter.  
  1108. StrongEd
  1109.  you need to type 
  1110. Ctrl Shift V
  1111. . Although copying in the reverse direction works fine with 
  1112. Impression
  1113.  it does not appear to work with these other applications. 
  1114.  doesn
  1115. t appear to support the global clipboard at all.
  1116. 2.5.3
  1117. Copying an entire record
  1118. Record, copying entire
  1119. When a new record contains much of the same information as an existing one you can save time by copying a whole record and editing the copy. Display the record you want to copy and then click the 
  1120. Add record
  1121.  button with ADJUST instead of SELECT (
  1122. Shift F10
  1123. ).  No blank record appears when you do this; instead an exact copy of the current record is displayed and a message appears informing you of this.  If you make no changes to the copy 
  1124. Powerbase
  1125.  will 
  1126.  add the new record to the database.  (It is assumed that no-one will ever want two absolutely identical records in the same database!)  Any alteration, however, leads to the record becoming part of the database.
  1127. 2.5.4
  1128. Choosing the field where editing starts
  1129. Editing, choosing starting field
  1130. When an existing or blank record is displayed 
  1131. Powerbase
  1132.  places the caret in the first (i.e. lowest-numbered) writable field of the record. This might not necessarily 
  1133. look 
  1134. like the first if the fields have been placed in out-of-sequence positions in the window. When going through a database making changes to one or two fields somewhere in the middle of records it might be convenient to have the caret start somewhere else. Click MENU over the field where you wish the caret to start, go to the 
  1135. Field 
  1136. submenu and choose 
  1137. Start editing
  1138. . Whenever a record is displayed the caret will be placed in the chosen field. The same procedure is used to restore the normal starting position. 
  1139. 2.5.5
  1140. Changing many records at once
  1141. To alter a given field in a set of records point the mouse at the field and click MENU. Go to the 
  1142. Field 
  1143. submenu and choose 
  1144. Global changes
  1145. . In the first writable icon (
  1146. Replace
  1147. ) enter what you want changing and in the second (
  1148. ) enter what you want the field changing to. In the third you may enter a 
  1149. search formula
  1150.  (see 
  1151. ) specifying which records are to be changed. Finally click on 
  1152. Change 
  1153. or type Return.  Note the following:
  1154. Search and replace
  1155. Only records in the current subfile are affected.
  1156. Replacement only occurs if the new data will fit in the field.
  1157. Leaving 
  1158. Replace
  1159.  blank causes the target field to be replaced in any record which matches the 
  1160. search formula
  1161. , otherwise replacement occurs only where the existing field matches the 
  1162. Replace 
  1163. string.
  1164. Leaving 
  1165.  blank causes the target field to be 
  1166. blanked 
  1167. in records which match the 
  1168. search formula
  1169.  and in which the target field matches the 
  1170. Replace
  1171.  string.
  1172. Leaving the 
  1173. search formula
  1174.  blank causes replacement to occur in all records of the current subfile for which the target field matches the 
  1175. Replace
  1176.  string.
  1177. It should be apparent from the above that leaving both 
  1178. Replace
  1179. Search formula
  1180.  blank will place the 
  1181.  string in all records of the current subfile. Since this is a rather drastic facility you will be asked for confirmation before the changes go ahead.
  1182. The characters 
  1183.  and 
  1184.  may be used as 
  1185. wild-card
  1186.  characters in the 
  1187. Replace
  1188.  and 
  1189.  strings.
  1190.  The first of these is used to represent a group of characters which don
  1191. t need to be matched.  If you enter:
  1192. Replace 
  1193. $Street
  1194. with 
  1195. $Road
  1196. the substitution will be performed on any record which matches the 
  1197. search formula
  1198.  and where the target field 
  1199.  with 
  1200. Street
  1201. . The ending will be changed to 
  1202.  leaving the rest of the string unchanged.  Another example of use is:
  1203. Wild cards in search-and-replace
  1204. Replace 
  1205. with 
  1206. 1047$
  1207. If the target field 
  1208. begins 
  1209. with 
  1210. , the beginning will be changed to 
  1211. , the remainder left unaltered. 
  1212. Replace 
  1213. $MPUT$ 
  1214. with 
  1215. $NFUS$
  1216. would change 
  1217.  occurring 
  1218. anywhere
  1219.  in the target field into 
  1220. , e.g. 
  1221. COMPUTER
  1222.  would become 
  1223. CONFUSER
  1224. (!).  You may, of course, use 
  1225.  in the 
  1226. middle
  1227.  of a word:
  1228. Replace 
  1229. re$ment 
  1230. with 
  1231. dis$d
  1232. would cause a string in the target field beginning with 
  1233.  and ending with 
  1234.  to have its head and tail replaced with 
  1235.  and 
  1236. , leaving the middle unchanged. e.g. 
  1237. replacement
  1238.  would become 
  1239. displaced
  1240.  character is used to represent a 
  1241. single 
  1242. wild-card character and can replace individual letters in specific positions. The 
  1243. Replace 
  1244. with 
  1245. strings must be the same length and should have 
  1246.  characters in the same positions. The characters in the remaining positions are the ones which get replaced, but only if they occur in the corresponding positions of the existing field value. 
  1247. You may also use 
  1248. Global changes
  1249.  to perform  simple calculations e.g. 
  1250.  will add 12 to the current value in the field on all the matching records. 
  1251. *5-13
  1252.  will multiply the current value by 5 and then subtract 13. It is operations like these which are most likely to produce values which won
  1253. t fit in the field, especially if floating-point numbers are involved. The operation isn
  1254. t limited to 
  1255. Numeric field
  1256. s, or even to other types of field consisting wholly of numerals; 
  1257. Powerbase
  1258.  will find the number embedded in an entry such as 
  1259. ABC45XYZ
  1260.  and the operation 
  1261.  would convert it to 
  1262. ABC57XYZ
  1263. arithmetic in search and replace
  1264. 2.5.6
  1265. Moving or deleting many records at once
  1266. Choose 
  1267. Move/delete
  1268.  from the 
  1269. Miscellaneous 
  1270. submenu. This opens a window which gives you the choice of three types of operation:
  1271. Deleting a batch of records
  1272. Moving a batch of records
  1273. Batch delete/move
  1274. Delete
  1275.  records from a designated subfile
  1276. accumulating records in one subfile
  1277. Accumulate
  1278.  records from all subfiles into one designated subfile  
  1279.  records from one designated subfile to another
  1280. The default is to 
  1281. Move 
  1282. records from the current subfile to the next in sequence, but any source or destination subfile may be specified by clicking on the bump-icons. Type in a 
  1283. search formula
  1284.  (see 
  1285. ) and click the default action button or type Return. All matching records will be moved or deleted as specified. Operations  by clicking on the 
  1286. button, but only for the last operation carried out. 
  1287. 2.5.7
  1288. Hiding sensitive data
  1289. Fields, making invisible and inaccessible
  1290. Invisible fields
  1291. Your database might contain information which you don
  1292. t want just anyone to read. A field may be hidden by placing the caret in it and typing 
  1293. Ctrl Shift F9
  1294. .  The text changes from black to mid-grey to tell you that something has been done to it.   If you subsequently type 
  1295. Ctrl Shift F2
  1296.  all such fields will vanish. You can make them reappear (in mid grey) with 
  1297. Ctrl Shift F1 
  1298. but they will always be invisible when the database is first opened. 
  1299. Ctrl Shift F9
  1300.  has a toggle action: repeating the operation on a field removes the protection.
  1301. Whilst in the invisible state a field cannot be selected for printing (see 
  1302. ). ADJUST has no effect and you can
  1303. t sneak round the protection by using 
  1304. Ctrl A
  1305.  to select all fields or by choosing a range containing the hidden field (i.e. by clicking with SELECT on an earlier field then double-clicking with ADJUST on a later one).  Its tag doesn
  1306. t appear in the 
  1307. Field
  1308.  entry of the main menu when you click MENU in the relevant place, nor does the field appear in the field list produced by typing 
  1309. Ctrl F
  1310. . As soon as you reveal the data by typing 
  1311. Ctrl Shift F1
  1312.  it can be printed as normal.
  1313. If you intend to use this facility you are strongly urged to password-protect your database (see 
  1314. Ch 11
  1315. ).  Only a user with 
  1316. Manager
  1317.  access rights
  1318.  will then be able to use 
  1319. Ctrl Shift F1, F2
  1320.  and 
  1321. .  If you leave the database unprotected then anyone can use the key combinations and might easily discover  them by chance (or by reading this manual!).
  1322. External field
  1323. The data in 
  1324. External field
  1325. s is not stored within the 
  1326. Database 
  1327.  but in separate files, one for each record. With the exception of Remote fields these files are stored inside the database
  1328. s application directory.  They may be Text, Sprite or 
  1329. Draw files
  1330.  and can be linked to buttons on the 
  1331. record window. 
  1332. Clicking on these buttons loads the External file into 
  1333. Paint
  1334.  provided that the relevant program has been 
  1335.  by the filer. (For 
  1336. Remote fields
  1337.  the file objects can be of any type whatsoever including applications and directories and clicking on the button performs the appropriate action, e.g. an application is run, a directory is opened, an Obey or Basic file is executed, other files are loaded into the appropriate editor if the filer knows where it is.  Remote fields are discussed fully in 
  1338. It is also possible to link Text files to a Text block field which will actually display the text (with certain limitations) within a large icon. Sprites may be similarly displayed in a Picture field.
  1339. 2.6.1
  1340. Linking files to the fields
  1341. External fields, linking files to
  1342. To link a file with an 
  1343. External field
  1344.  drag the file
  1345. s icon onto the 
  1346. record window
  1347.  and drop it on the appropriate field. For example, if the record includes a field represented by a 
  1348. Text button
  1349. , i.e. one bearing a small version of the 
  1350. Edit 
  1351. icon, you may drop a 
  1352. Text file
  1353.  onto it. The button
  1354. s icon changes to the small version of the Text file icon to indicate that the file has been linked. Sprite and Draw files are linked in the same way and 
  1355. Powerbase
  1356.  will not allow the wrong type of file to be linked. A 
  1357. Text block
  1358.  field also may have a Text file dropped onto it.
  1359.  The text (or as much of it as will fit inside the icon) is then displayed on the 
  1360. record window
  1361. .  The formatting will not be the same as it is when you examine the text in 
  1362. ; lines are word-wrapped and centred within the display icon. (This is a feature of multi-line RISC OS text icons and is out of the control of 
  1363. Powerbase
  1364. .) You can
  1365. t edit the text directly but it is possible to export the file for editing (see below). Sprite files may be dropped onto and displayed in a 
  1366. Picture
  1367.  field. Any new file dropped onto an 
  1368. External field
  1369.  which is already linked to a file simply replaces the old file with the new. 
  1370. 2.6.2
  1371. Editing External fields
  1372. You can
  1373. t edit an 
  1374. External field
  1375.  directly, only via an appropriate editing program such as 
  1376. Paint 
  1377. . As long as the editor has been 
  1378.  by the filer clicking on the on-screen button with SELECT will load the file into the editor and display it. You can edit the file and re-save it without altering its name and it will remain associated with the same field of the record.  
  1379. Text block
  1380.  and 
  1381. Picture
  1382.  files are loaded into their editors by a double click.
  1383. External fields, editing
  1384. 2.6.3
  1385. Clearing and exporting field contents 
  1386. External fields, unlinking
  1387. External fields, exporting
  1388. Clicking MENU over an 
  1389. External field
  1390.  makes available certain entries on the 
  1391. Field 
  1392. submenu which are shaded for other types of field. 
  1393. Remove external 
  1394. lets you delete the linked file from the database application.
  1395.  As deleting a file is rather drastic you would probably like to be warned when this is about to happen so the message 
  1396. Delete object? Are you sure?
  1397.  normally appears. Finally, 
  1398. Save contents
  1399.  on the 
  1400. Field 
  1401. submenu lets you export the linked field to a filer window or to another application. 
  1402. 2.6.4
  1403. Editing scrollable lists
  1404. scrollable lists, editing
  1405. Entering or altering data in a scrollable list is not very different from doing so in other types of field, but some keys do behave differently and there are extra keystrokes to access the special features of such lists.
  1406. Return 
  1407. moves the caret from cell to cell across the current row, then jumps to the start of the next row. When it reaches the last visible cell the list will scroll up a row if there are still rows to display. If the last cell of the list has been reached the caret moves to the next field or next record, just as it does for other types of editable field.
  1408. Shift-Return
  1409.  behaves like Return until the last cell of the list is reached. It then adds a row to the list, moving the caret to the start of the new row. You may add as many rows as you wish and each record can have a different number of rows.
  1410. Insert
  1411.  with the caret anywhere in the list also adds a row to the end, but this time without scrolling the list or moving the caret. There is (at present) no way of inserting a blank row into the middle of the list.
  1412. Shift-Insert
  1413.  is used to remove unwanted blank rows. (Not Shift-Delete, as you might expect because this will have the same effect on characters as Delete!) This key-combination is quite safe: it will only delete when the caret is in the last row and only if that row is blank.
  1414. Ctrl-Shift-Insert
  1415.  will force the deletion of whatever row the caret is in. You aren
  1416. t very likely to use this accidentally.
  1417. scrollable list, deleting rows
  1418. scrollable list, adding rows
  1419. Neither Shift-Insert nor Ctrl-Shift-Insert will let you delete rows so that the number is fewer than the window can display: when the scroll-bar completely fills its slot this minimum has been reached.
  1420. Up and Down arrows
  1421.  move the caret vertically from cell to cell, staying in the same column. When at the top or bottom of the list wrap-around occurs instead of the caret moving to the previous or following field as it does for other field types.
  1422. Wiping a scrollable list
  1423. scrollable list, clearing
  1424. Click MENU over the list and go to the 
  1425. Field
  1426.  submenu. Choose 
  1427. Blank list
  1428. . You will be asked for confirmation before the data is deleted.
  1429. Data export and import
  1430. scrollable list, exporting from
  1431. scrollable list, importing to
  1432. When MENU is clicked over a scrollable list two choices become available on the 
  1433. Field
  1434.  submenu in addition to 
  1435. Blank list
  1436.  noted above:
  1437. Save as list 
  1438. saves the contents of the scrollable list as a plain text file. The contents of each cell of the list occupies a separate line and there is nothing in the file to indicate which items came from the same row and which came from different rows. If such a list is dropped onto a scrollable list field the data will be imported cell by cell, working along each row to the end and then moving to the next.
  1439. Save as CSV
  1440.  saves the list as a CSV file (see 
  1441. ) with each row of the list as a separate CSV record and each cell in the row as a CSV field. The characteristics of the file are determined by the CSV Options window just as they are for exporting data from ordinary fields.
  1442. If you drop such as CSV file onto a scrollable list field the result is somewhat different from the importing of a text list as described above because the data in the file is more structured; the row and column information of the field from which the data came has been retained. 
  1443. Suppose you have exported such a file from a 3-column scrollable list. If you drop the file onto a 2-column list the third item in each line of the file will be ignored: the destination field will contain what the first two columns of the source field contained. If, on the other hand, you drop the file onto a 4-column scrollable list the 4th column of the list will be left blank. 
  1444. nd and
  1445. Colours referred to above which are used to identify
  1446.  key fields
  1447.  are the default colours but it is possible for the user to change them 
  1448. (see 
  1449. * If the 
  1450. validation
  1451.  feature proves to be a nuisance you can turn it off.  To do so bring up 
  1452. Powerbase
  1453. iconbar menu and choose 
  1454. Preferences
  1455. . One of the option switches on the left of the 
  1456. preferences
  1457.  window is called 
  1458. Validate input
  1459. . Turn this switch off and click on 
  1460. Accept
  1461. . All validation, including the insistence on filling in mandatory fields, will then be disabled.
  1462. If the primary key is derived from two or more fields you need not fill in all of them as long as the result is not a null key.
  1463. The characters used to represent single and multiple wild-card characters may be changed via the Preferences window (see 
  1464. 14.5.2
  1465. * If you drop a text file in the wrong place in the record window 
  1466. Powerbase
  1467.  will think you want to treat the file as CSV file and import data from it (see 
  1468. CSV files
  1469. ) and the Import text file window will appear. This is rather startling but harmless enough as long as you don
  1470. t click on 
  1471. Import
  1472. !  Click on 
  1473. Cancel 
  1474. to get rid of the window. 
  1475. Unlinking objects attached to Remote fields, Run file buttons and Directory buttons is also done like this (see 
  1476. 4.2.8
  1477.  and 
  1478. 4.2.11
  1479. Ch 3 
  1480.  Printing from the Database
  1481. This chapter describes how to print out selected data from a database, including the printing of individual records and of labels. Such a print-out is commonly referred to as a 
  1482. report
  1483. Output destination
  1484. Printed output may be displayed in a window, directed to a specified text file or sent straight to the printer.  Choosing 
  1485. Options
  1486.  from the 
  1487. Print
  1488.  submenu (keystroke equivalent 
  1489. Ctrl Print
  1490. ) displays the 
  1491. Print Options
  1492.  window and you will see at the top of the window three radio buttons, 
  1493. Window
  1494.  and 
  1495. Printer
  1496. , which allow you to select the 
  1497. output destination
  1498. . Each of these options will now be described.
  1499. 3.1.1
  1500. Window destination
  1501. Saving from a Report window
  1502. Printing from a Report window
  1503. This is the default setting and, as its name suggests, it displays the completed report in its own window. Clicking with MENU over this window opens the Report
  1504. menu which offers four choices:
  1505. Save as text 
  1506. leads to a 
  1507. Save box
  1508.  from which an icon may be dragged to a filer window or to any application which can accept a Text file. The supplied pathname uses an appropriate leaf-name for the file and points to a directory called 
  1509. PrintJobs
  1510.  which is inside the database directory. Each database has its own 
  1511. PrintJobs
  1512. directory whose contents can be displayed by choosing 
  1513. Show jobs done
  1514. ) from the Print
  1515. submenu. To save files with the least bother simply click on 
  1516.  or type Return. You can, of course, delete the pathname (
  1517. Ctrl U
  1518. ), type in your own filename and drag the file icon to any open directory. You might also be able to produce hard copy by 
  1519. saving
  1520.  the text to the 
  1521. Printers
  1522.  icon on the iconbar, although some recent printers contain no fonts of their own and therefore cannot print text files in this way. 
  1523. Look in 
  1524. PrintJobs
  1525. regularly and get rid of files which you no longer need.   
  1526. Sorting lines in a Report window
  1527. will sort the report on whatever column the mouse pointer was over when you clicked MENU.
  1528. Shrink list
  1529. will remove as much surplus 
  1530. white space
  1531.  as possible from between the columns of a report. This item might be shaded: 
  1532. white-space removal
  1533.  can be set to occur automatically before the report is displayed (in fact this is the default setting). If this is the case no further space can be removed and the menu choice is therefore made unavailable.
  1534. PrintJobs directory
  1535. Scrap 
  1536. removes the report window from the screen and recovers the memory it occupied. You might find this useful if you run short of memory after creating a large report.
  1537. Calling up records from the report window
  1538. Records, retrieving via Report window
  1539. The report window has one more useful feature. If you point at a particular piece of displayed data and double-click with SELECT the record window will come to the front displaying the relevant record. If the field corresponding to the item you clicked is editable the caret will be placed in that field. If you are using a report to look for errors in the data you can quickly correct them by this method but the report won
  1540. t change to reflect your corrections until you re-create it.  If you double-click with ADJUST instead of SELECT the record window opens at the pointer and its size and scrolling are adjusted to show only the required field. 
  1541. 3.1.2
  1542. File destination
  1543. Save box
  1544.  will appear as soon as you tell 
  1545. Powerbase
  1546.  to go ahead and generate the report. The supplied pathname is the same as would be displayed when saving from the report window. Simply click 
  1547.  to save it in 
  1548. PrintJobs
  1549. under that name.  Alternatively, type a filename and drag the icon to an open directory. The report will then be created and the file closed.  Nothing else appears on the screen in this case. The File destination is of greatest use when reports are being produced from a Script file (see 
  1550. Ch 12
  1551. 3.1.3
  1552. Printer destination
  1553. When the 
  1554. Printer 
  1555. radio button is selected the 
  1556.  button alongside becomes available. (It is shaded when 
  1557. Window
  1558.  is selected.) Clicking 
  1559.  opens the Printer Setup window which provides a wide range of options. You may specify the number of copies to print, choose the font and point-size to be used, print with the paper upright (portrait) or sideways (landscape) and set the inter-line spacing and any or all of the four margins. All measurements other than font size may be specified in mm (default), inches or points.
  1560. Print formats
  1561. formats for reports
  1562. reports, formats for
  1563. Powerbase
  1564.  is capable of producing reports in four different formats. Only two of these,
  1565.  Horizontal
  1566.  and 
  1567. Vertical
  1568. , are available when you print to a window or a file and these are selected via two radio buttons on the Print Options window. When the output destination is 
  1569. Printer
  1570.  two additional formats, 
  1571. Table
  1572.  and 
  1573. Label
  1574. , are also available and are selected from the Printer Setup window.These four formats will now be described.
  1575. 3.2.1
  1576. Horizontal
  1577. Headings in reports
  1578. numeric fields, justification of
  1579. This is so-called because each record appears on a single, horizontal line with the fields aligned so that they form neat columns. Non-numeric fields are left-justified. Numeric fields, and others whose content is treated as a numeric value (see 
  1580. 3.5.2
  1581. ), are right-justified. A header line identifies the columns by means of the tags or descriptors of the fields and this header can be made to appear on every page of the report or on the first page only. An optional descriptive title may also be incorporated. The 
  1582. Spacer
  1583.  is used to separate columns (see 
  1584. ). All these features (and others) are chosen from the Print Options window.
  1585. Besides the ability to sort a report in a window (see 
  1586. 3.1.1
  1587. ) you may force 
  1588. Powerbase
  1589.  to sort the report 
  1590. before
  1591.  displaying it. To do so, select the 
  1592. Sort on 
  1593. option button in the Print Options window and enter in the associated writable icon either the tag of the field on which you wish to sort or the column number of the report. The feature is only of use in Horizontal and Table formats, but may be used with the 
  1594. Printer
  1595.  destination as well as with 
  1596. Window
  1597. sorting, specifying before printing
  1598. 3.2.2
  1599. Vertical  
  1600. Fields are printed underneath each other with the identifier (tag or 
  1601. descriptor
  1602. ) at the left  hand side. Where the 
  1603. field selection
  1604.  includes an external text file, i.e a Text or 
  1605. Text block
  1606.  field, the 
  1607. Vertical
  1608.  format is the only one which may be used and will be selected automatically.  Although each field normally occupies a line to itself you can override this by holding down Shift as you click with ADJUST to select the field. You will then 
  1609. get a new line after the field: the next field to be selected will appear (with its identifier) on the same line. We will call this function 
  1610. field 
  1611. concatenation
  1612. It may be applied to any number of fields: keep Shift down while selecting all except the last one to appear on the line.  This feature is very useful if your report contains a mixture of long fields which need a line each and short ones which don
  1613. t and would otherwise result in wasted space and paper.  Concatenated fields are separated by the 
  1614. Spacer
  1615.  and the width of the report is governed by 
  1616. Text width
  1617.   (see 
  1618. 3.2.3
  1619. Table
  1620. Line spacing, for tables
  1621. This is only available when outputting to the printer. It resembles Horizontal format but the lines and columns are separated by horizontal and vertical rules, forming a grid. When this format is selected a number of extra features are enabled allowing you to include extra (blank) columns and lines, making this format especially useful when you want a list to which information is to be added by hand (e.g. entering marks against a printed list of students). The number and width of blank columns and the number of extra lines may be specified. For a tidy result it is recommended that you increase the 
  1622. line-spacing
  1623.  from the default 120% to about 150% when using Table format.
  1624. 3.2.4
  1625. Label  
  1626. This is meant for printing on special label stationery. Since such stationery is expensive you are advised to try out your settings on plain paper first! Selecting this format enables the label setup choices which include the label size and the number of labels in a row. It also allows optional fixed starting and finishing lines to appear on each label. The number of lines on the label is not needed: 
  1627. Powerbase
  1628.  works this out from the label height and print size.
  1629. Labels, number of lines printed
  1630. Printing will normally begin on the first label in the first row on the sheet but, to enable you to use up a part sheet of labels, you may specify which label to begin with, e.g. for three-in-a-row labels, entering 5 would make printing start at the second label of the second row. After the first sheet the starting-point reverts to the first label in the first row.  
  1631. Labels, using up part sheets Labels, including primary key
  1632. Each field normally appears on a separate line but fields may be concatenated in the same way as for Vertical format, with the 
  1633. Spacer
  1634.  being used to separate the fields (
  1635. see 3.10
  1636. ).  This may be necessary if you are using separate fields for surname and initials or surname and forename. 
  1637. Labels, substituting for blank field
  1638. You may specify one field to be substituted for another if the latter is blank. Both fields are specified by tag and the 
  1639. Substitute
  1640.  switch is set. This is useful in a school or college situation where labels are being addressed to parents.  Mature students, for whom the 
  1641. parent
  1642.  field in the record is blank, can have their own names printed instead. Another switch makes the 
  1643. primary key
  1644.  of the record appear in small print on each label as a means of identification. This can be useful if the data printed on the label doesn
  1645. t make it obvious which record it comes from.    
  1646. What types of field can be printed?
  1647. printable fields
  1648. Powerbase
  1649.  can use many different types of field.  All are described in 
  1650. 4.2.5
  1651.  in connection with setting up a new database and you should refer to that section to clarify what follows here. You can print data from the following types of field:
  1652. Editable 
  1653. field (i.e.one into which you can type directly), including 
  1654. Scrollable lists
  1655. Computed
  1656.  and 
  1657. Stamp 
  1658. fields.         
  1659. Text and 
  1660. Text block
  1661.  fields.         
  1662. Check Boxes
  1663. . What is printed for these differs from what you see in the check box.
  1664. Thus:
  1665. (a) Tick/Cross  boxes result in 
  1666.            
  1667.       
  1668. (b) Tick/Blank  boxes result in 
  1669.              
  1670. Check boxes, appearance in reports
  1671. (c) Star/Blank  boxes result in an asterisk or 
  1672. (d) Null/Tick/Cross boxes result in 
  1673. Check boxes, 3-state
  1674. (e) ?/Tick/Cross boxes result in 
  1675. Note that (d) and (e) are three-state check-boxes; (a), (b) and (c) are two-state check-boxes.
  1676. It is, of course, possible to print Draw and Sprite fields from 
  1677. individual 
  1678. records by loading the external file into 
  1679. Draw 
  1680. Paint 
  1681. and printing from that application (See 
  1682. 2.6.2
  1683. Specifying which fields to print
  1684. The field or fields selected for printing is called a 
  1685. print selection. 
  1686. Point at each of the required fields and click with ADJUST. The fields will be highlighted by reversing the foreground and background colours. Only those fields which are printable (see 
  1687. ) will respond to ADJUST in this way.  A second click will de-select the field. Note that the 
  1688. order 
  1689. in which you select the fields is important since that is the order in which they will appear in the report. The
  1690. menu button at the bottom-centre of the Match window (see 
  1691. ) will list the fields in the order in which they have been selected. 
  1692. Ctrl F 
  1693. has the same effect. (If no fields are selected 
  1694. Ctrl F
  1695.  gives a listing of 
  1696.  the fields.) 
  1697. choosing fields to print
  1698. A contiguous range of fields may be selected by placing the caret in the first field then double-clicking with ADJUST in the last.  To select 
  1699.  printable fields choose 
  1700. Select all (Ctrl A)
  1701.  from the 
  1702. Print 
  1703. submenu.  There is also a 
  1704. Clear selection
  1705.  entry on this submenu (
  1706. Ctrl Z
  1707. 3.4.1
  1708. Saving print selection files
  1709. PrintRes directory
  1710. Print selections
  1711.  may be saved for future use. 
  1712. Save selection
  1713.  from the 
  1714. Print
  1715.  submenu leads to a Save box. Accepting the default pathname will save the file with the name
  1716.  Selection
  1717.  in a directory called 
  1718. PrintRes
  1719. . Just as every database has its 
  1720. PrintJobs
  1721.  directory, so does it also have its own 
  1722. PrintRes
  1723.  (i.e. 
  1724. Print Resources
  1725. ) directory whose contents can be displayed with 
  1726. Show resources (Ctrl R)
  1727.  from the 
  1728. Print 
  1729. submenu. Selection files are of type &7f3 and are distinguished by their icon which bears a large 
  1730. . Because they have a specific file-type which 
  1731. Powerbase
  1732.  recognizes they can be loaded by double-clicking on them. 
  1733. 3.4.2
  1734. Default selection
  1735. You may save as many print selections as you like and use any file-names, but one name is special: a file saved as 
  1736. !Selection
  1737.  is treated as a 
  1738. default selection
  1739. . When you instruct 
  1740. Powerbase 
  1741. to create a report without having first highlighted the fields to be included, the default selection will be searched for in 
  1742. PrintRes 
  1743. and used. If there is no such file the primary key field(s) will be printed. As soon as the report is complete the selection is cleared. You won
  1744. t see the highlighting of the fields at all when a selection is used automatically in this way.
  1745. To save a default selection you need only select the option button 
  1746. Default selection
  1747.  in the Save box and accept the supplied pathname by clicking 
  1748.  or typing Return.
  1749. Specifying which records to print
  1750. Unless we want to print all the records in the database we need some means of telling 
  1751. Powerbase 
  1752. what are the common features of the records we wish to print. There are two ways of doing this. The more versatile way (and the one which 
  1753. Powerbase
  1754.  uses by default) makes use of a 
  1755. search formula
  1756. query
  1757.  describing the characteristics of the required records.  The remainder of this section deals with the construction and use of search formulae.  For the alternative method, 
  1758. query by example
  1759.  see Section 
  1760. If you choose 
  1761. Print
  1762.  from the main menu a small window with the title 
  1763. Find matching records
  1764.  appears. We will call this the 
  1765. Match window
  1766. .  The same thing happens if you go to the 
  1767. Print 
  1768. submenu and choose 
  1769. Create report
  1770. . Simplest of all is to just type the Print key on the keyboard. The most prominent feature of the Match window is a group of icons enclosed by a thin red border. This object is called the 
  1771. Query panel
  1772.  and you may have already seen it since it forms part of several windows. It appears when you select the 
  1773. Filter
  1774.  switch
  1775.  on the 
  1776. keypad
  1777.  for example (see 
  1778. 2.3.3
  1779. ) and is also used when making 
  1780. Global changes
  1781. 2.5.5
  1782. ), performing a 
  1783. Move/delete
  1784.  operation on a batch of records (
  1785. 2.5.6
  1786. ), doing a 
  1787. Mail merge
  1788. 9.2.2
  1789. ), exporting a 
  1790. CSV file
  1791. ) and creating a 
  1792. Subset
  1793. The writable icon in the 
  1794. Query panel
  1795. , in whatever context the latter appears, is meant to take a 
  1796. search formula
  1797. . The simplest thing you can do, of course, is to type nothing at all! If you then click on the 
  1798. Print
  1799.   button you will create a list of all the records in the current subfile of the database. You could achieve the same result by typing 
  1800. , indeed if after producing the above list with a null formula you click on the 
  1801. button 
  1802. Ctrl O)
  1803. , which retrieves the last-used 
  1804. search formula
  1805. , you will find ALL displayed.
  1806. 3.5.1
  1807. The construction of 
  1808. search formula
  1809. Most database queries will involve a selected group of records. A 
  1810. search formula
  1811.  describes the criteria which records must fulfil in order to be included in the report. Getting to grips with 
  1812. search formula
  1813. e is, perhaps, the biggest hurdle faced by the new 
  1814. Powerbase
  1815.  user and you are referred first to the simple examples described in the 
  1816. Tutorial
  1817. file. A 
  1818. search formula
  1819.  consists of one or more 
  1820. search element
  1821. search element
  1822.  specifies that a field value must fit a certain condition and takes the form:
  1823. <TAG LIST><
  1824. COMPARATOR
  1825. ><TARGET LIST> 
  1826. The angle brackets are there for clarity and are not used in entering the actual formula. There must be no spaces between the three parts. A
  1827.  tag list
  1828.  (if it contains more than a single tag) has the form:
  1829. tag1,tag2,tag3,.... 
  1830. where tag1 etc. are field 
  1831.  (see 
  1832. 4.2.1
  1833.  and 
  1834. 4.2.4
  1835. ) which identify the fields to be matched. A 
  1836. target list
  1837.  (if it contains more than a single target) has the form:- 
  1838. target1,target2,target3,.... 
  1839. If the 
  1840. Case 
  1841. switch
  1842.  on the 
  1843. Query panel
  1844.  is selected then all comparisons will be case-specific, e.g. 
  1845.  will be regarded as different from 
  1846. . If the 
  1847. Case 
  1848. switch
  1849.  is not selected all those three will be considered identical. Fields are normally listed in ascending alphabetical order or, for numeric fields, ascending numerical order. If the 
  1850. Reverse
  1851.  switch
  1852.  on the Query panel is set they will appear in 
  1853. reverse order
  1854. The heading of a report shows which fields were used in the search formula and what targets were specified. If a target was placed in quotes (which is the only way of searching for any string containing a comma, for example) then it appears in quotes in the heading also.
  1855. It is impossible to describe the use of 
  1856. search formula
  1857. e adequately without quoting actual examples. As in the 
  1858. Tutorial
  1859. file we will mainly make use of the 
  1860. Elements
  1861.  sample database.  A simple example of a search formula consisting of a single search element is:
  1862. where GP is the field tag, = is the comparator and T is the target. This means 
  1863. The field whose tag is GP must contain the value T
  1864. , i.e. all transition elements (but no others) are to be included in the report. 
  1865. A slightly more complex one is: 
  1866. GP=1,2,3
  1867. which would be interpreted as 
  1868. The GP field must match one of 1,2 or 3
  1869. . This may also be entered as:
  1870. GP=1 OR GP=2 OR GP=3
  1871. which is possibly easier to understand but also somewhat longer.  A further example is: 
  1872. OR in search formulae
  1873. OX1,OX2,OX3=3
  1874. meaning 
  1875. One of the first three oxidation state fields must have the value 3
  1876. This could also be entered as:           
  1877. OX1=3 OR OX2=3 OR OX3=3
  1878. Yet another way is:
  1879. OX1-OX3=3
  1880. i.e. you may specify a range of 
  1881. adjacent 
  1882. fields by giving the first and last separated by a hyphen.  Where you don
  1883. t know which fields to test you can replace the tag, tag list or tag range with @, which causes all the fields in the record to be examined.
  1884. hyphen in search formulae
  1885. Note that in these examples only 
  1886. of the fields in the tag list is required to match 
  1887. of the targets in the target list (although it doesn
  1888. t matter if more than one field matches more than one target). Sometimes we want an 
  1889. inclusive 
  1890. search
  1891.  so that 
  1892. of the fields in the tag list match a given target or, less frequently, a field contains 
  1893. of the values in the target list. It
  1894. s a matter of connecting the search elements with AND instead of OR. You can do exactly that:
  1895.            OX1=3 AND OX2=3 AND OX3=3 
  1896. AND in search formulae
  1897. You may also save typing by using the ampersand (&) instead of the word AND, but the same result can be achieved even more briefly by simply 
  1898. doubling the 
  1899. comparator
  1900. , in other words using 
  1901.  instead of 
  1902.  so that the formula becomes: 
  1903. OX1,OX2,OX3==3
  1904. The full list of available 
  1905. comparator
  1906. s is:
  1907. Comparators in search formulae (list)
  1908. doubled comparators in search formulae
  1909. =, <>, <, >, <=, >=, { 
  1910. and  
  1911.        (N.B. 
  1912.  may be used instead of 
  1913.  should be read as 
  1914. contains
  1915.  and  
  1916.   as 
  1917. does not contain
  1918. .  These are used where the target value must (or must not) be part of the field but isn
  1919. t expected to make up the whole field.  The use of { is the main source of those rare instances where we want 
  1920.  the items in a target list to be matched in a given field. e.g. Suppose we knew that someone
  1921. s house number was 17 and that they lived on 
  1922. <something> Avenue
  1923.  but the actual name couldn
  1924. t be remembered.  In a database of addresses a search formula such as:
  1925. ADDR{{17,Avenue
  1926. (note the doubled comparator) would find it, whereas: 
  1927. ADDR{17,Avenue
  1928. would find all those addresses where the house number was 17, regardless of street name, and all those addresses with 
  1929. Avenue
  1930.  in them, whatever the house number. 
  1931. You may invert the logic of a search criterion by putting
  1932.   NOT
  1933. in front of it. To print all non-transition elements you could use:
  1934. NOT in search formulae
  1935. NOT (GP=T)
  1936. Note the space after 
  1937. , the need for brackets, and that the syntax 
  1938. GP NOT=T
  1939. . You could equally well use one of the following:
  1940. GP<>T 
  1941.  GP~T
  1942. and may find either of these more understandable. To make 
  1943. multi-criterion searches
  1944.   either place 
  1945.  and targets in comma-separated lists as described above or string search elements together with the connectives AND and OR. Use AND (or the ampersand, &) when a field must meet 
  1946. of a set of criteria. e.g.
  1947. GP=T & Z>50 & NAME{IUM
  1948. for all transition metals with atomic numbers greater than 
  1949.  and names containing 
  1950. . Use 
  1951. when a field need meet only 
  1952. of a set of criteria. e.g.
  1953. GP=L OR GP=A 
  1954. would find all lanthanide and actinide elements as the formula means 
  1955. either 
  1956. L or A
  1957. ; I don
  1958. t care which
  1959. . AND and OR
  1960. can produce ambiguous search formulae e.g.
  1961. GP=1 OR GP=2 AND Z<50
  1962. could mean either 
  1963. elements in group 1 or 2 (don
  1964. t care which) with atomic numbers less than 50
  1965.  or  
  1966. group 1 elements (of any atomic number) or group 2 elements whose atomic numbers are less than 50
  1967. . You probably want the former, but 
  1968. Powerbase
  1969.  will give you the latter. To get what you require use brackets to make the logic clear. In other words write it as:
  1970. OR in search formulae
  1971. (GP=1 OR GP=2) AND Z<50
  1972. You could also write this as:                         
  1973. GP=1,2 & Z<50      
  1974. without the need for brackets at all.
  1975. 3.5.2
  1976. Numeric and other special fields in search formulae
  1977. For most types of field the comparison with the target is made by 
  1978. character matching
  1979.  but for certain types the comparison uses the  
  1980. numeric value 
  1981. of the field. The fields concerned are:
  1982. Numeric, Calculated, Record number, Sequence number, Day of month, Month number, Year
  1983. Only the first of these is an editable field type but all may be included in search formulae.  Suppose we have a Numeric field whose tag is NUM.  If you entered the formula:
  1984. Numeric fields in search formulae
  1985. NUM=5
  1986. the record would be included in the report if NUM contained 5, 05, 5.0 etc. because all of these have the same numeric value. If you had an Alphanumeric field called NUM the same search formula would only match records where the content was 
  1987. literally 
  1988. 5, i.e. the character 
  1989. . This can easily catch you out. Suppose, for example, you want to print records for which NUM<8. You might be surprised to find records in which NUM contains values such as 55, 20, or 13 being printed, as well as those containing 4, 6, 2 etc!  If this happens check what type of field NUM is.  Unrestricted and Alphanumeric fields will give the above result; Numeric fields (and the others listed above) will give the result you probably want.
  1990. You can 
  1991. force 
  1992. comparison by numeric value
  1993.  for a field which consists of (or, at least, begins with) numerals, even though the field is not defined as of Numeric type,  by enclosing the field tag in square brackets, e.g. 
  1994. [NUM]<8
  1995.  would produce the desired result in the above example even if the field is Alphanumeric or Unrestricted. This is useful where you want to make a comparison but still allow the field to accept non-numeric characters. The comparison-by-value can only work in such cases if the number part of the field comes first. e.g. it will deal correctly with 55A, 20B, 13X but not with A55, B20, X13. 
  1996. 3.5.3
  1997. Using 
  1998. wild-cards
  1999. search formula
  2000. The use of characters 
  2001.  and 
  2002. wild-cards
  2003.  was described in 
  2004. 2.5.5
  2005.  in connection with search-and-replace operations. They may be also be used in 
  2006. search formula
  2007.  is used to represent a 
  2008. group 
  2009. of characters and 
  2010.  to represent 
  2011. single 
  2012. characters which do not need to be matched.  e.g. If (still using the 
  2013. Elements
  2014.  database) you type:
  2015. Wild cards in search formulae
  2016. NAME=$ON
  2017. you are, in effect, saying 
  2018. find all the elements whose names end in ON
  2019. ; I don
  2020. t care what precedes ON as long as nothing follows it
  2021. Powerbase 
  2022. will duly find 
  2023. CARBON, BORON, NEON etc.  If you were to use:
  2024. NAME=$ON$
  2025. You would find PLUTONIUM, POLONIUM but 
  2026. CARBON, BORON, NEON; something 
  2027.  precede ON as well as follow it. (To print both sets of elements you would use 
  2028. NAME{ON
  2029. Note also that:
  2030. NAME=$TIN$
  2031. finds PROTOACTINIUM,  PLATINUM etc, but 
  2032. TIN itself. 
  2033. NAME=S$IUM
  2034. finds all names which begin with 
  2035. and end with 
  2036. , e.g. SAMARIUM, 
  2037. SCANDIUM
  2038. and SODIUM.  The effect of:
  2039. NAME=S####IUM
  2040. is somewhat different. You are, again, asking for names which begin with S and end with IUM but this time SAMARIUM and SCANDIUM would be found, but 
  2041. SODIUM since you have specified exactly 4 
  2042. wild-card
  2043. ed letters between the S and the I.  Finally, to find any 5-letter name, regardless of the actual letters:
  2044. NAME=#####
  2045. 3.5.4
  2046. Comparing the contents of two fields
  2047. A field tag (instead of a literal string) may be specified as a target, thus allowing two fields in a record to be compared to produce, for example,  a list of all records in which the relevant fields have the same content.  This might interfere with a 
  2048. normal
  2049.  query where the required literal target happens to be the same as the tag of another field. The problem can be overcome by enclosing the literal string in quotes. 
  2050. Query file, default
  2051. 3.5.5
  2052. Saving search formulae for re-use
  2053. Choosing 
  2054. Save query
  2055.  from the 
  2056. Print
  2057.  submenu opens a Save box from which the search formula may be saved. By default the file is saved in 
  2058. PrintRes
  2059.  under the name 
  2060. Query
  2061. . Selecting the 
  2062. Save as default
  2063.  switch on the Save box will cause the file to be saved as the 
  2064. default query
  2065.  with the name 
  2066. !Query
  2067. . If such a file exists in 
  2068. PrintRes
  2069.  it will be automatically entered in the Query panel whenever the Match window is opened. A default query file, in other words, behaves in a similar way to a default selection file as described in 
  2070. 3.4.2
  2071. . Query files are of type &7f4 and are recognizable by the large 
  2072.  in their icon. You may save as many Query files as you like and load them into the query panel by double-clicking on them. 
  2073. query files
  2074. Query by example
  2075. After that lengthy description of the 
  2076. search formula
  2077.  method of querying the database we turn to the alternative: query by example.  For brevity when comparing the two we will refer to them as 
  2078.  and 
  2079.  respectively.  Select the option switch at the top left of the Match window in order to use QBE. 
  2080. 3.6.1
  2081. What is 
  2082. The user is presented with a blank record and invited to type into the relevant fields the data which must be matched in order for the record to be included in the report. What you are saying in effect is: 
  2083. I want a list of all records which look like this. I don
  2084. t care what
  2085. s in any of the fields I haven
  2086. t filled in, but the ones I 
  2087.  filled in must correspond to what I have typed.
  2088.   e.g. in the 
  2089. Elements
  2090.  database if you wanted to print a list of all transition metals you would simply enter
  2091. in the 
  2092. Group 
  2093. field and then proceed with the report.  The 
  2094. of the field isn't needed at all, whereas using a search formula requires you to type 
  2095. . Enter the data to be matched then  either click with SELECT on the 
  2096. Print
  2097.  button of the Match window or else press the Print key.
  2098. If you simply enter the required target strings 
  2099. Powerbase
  2100.  assumes that you want the relevant fields to match 
  2101. exactly
  2102. , i.e the effect is the same as using 
  2103.  in a search formula. There are, however, other  comparators besides 
  2104.  which may be used in search formulae. (see 
  2105. 3.5.1
  2106.  for explanation and complete list). You may use any of these in a QBE query by placing them at the start of the string, e.g. 
  2107. {Avenue
  2108.  in an Address field would match all records where the field 
  2109. contained
  2110.  the word 
  2111. Avenue
  2112. .  An address such as 
  2113. 15 Acacia Avenue
  2114.  could be found by this method whereas just entering the word 
  2115. Avenue
  2116.  wouldn
  2117. t work because it would require the field to read 
  2118. Avenue
  2119.  and nothing more. 
  2120. Wildcards may be used; e.g. you could print from the 
  2121. Elements
  2122.  database all elements ending in IUM by entering 
  2123.  in the 
  2124.  field or all those whose symbol began with H by entering 
  2125.  in the 
  2126.  field.
  2127. You may specify a 
  2128. target list
  2129.  (see 
  2130. 3.5.1
  2131. ) to make the search include all records matching any item in the list. e.g. 
  2132. Leeds,Liverpool,Manchester
  2133.  in a Town field (if it will fit) would cause records with any of these places to be included. You can also specify a 
  2134. field list
  2135.  (equivalent to a 
  2136. tag list
  2137. ; see 
  2138. 3.5.1
  2139. ) provided that the fields form a contiguous group. The target string (which may be a target list, be wild-carded or be preceded by a comparator) is entered in the first field of the group. Press Return and enter " (double quote or 
  2140. ditto
  2141.  mark) in the next field and for the remaining fields of the group. (Pressing Return rather than moving the caret by means of the mouse ensures that you really are dealing with a contiguous group of fields.)
  2142. 3.6.2
  2143. QBE vs SF
  2144. So what are the advantages and disadvantages?  QBE is very intuitive and avoids the need to bother with field tags or the minutiae of search formula syntax. On the other hand SF is more comprehensive and flexible: there are some things you simply cannot do with QBE.  Some of the limitations have already been mentioned but here is a complete list. 
  2145. Query by example, limitations of
  2146. Except where exact matches (
  2147. field=target string
  2148. ) are required it might not be possible to fit the target string or list into the relevant field.  One consequence is that you can't target a Date field for all dates prior to, say, 01-06-90 since dates fit their fields exactly leaving no room for the necessary < comparator.  Such a search is perfectly possible with SF.
  2149. Searches involving multiple fields and the same target, i.e. those where FieldX 
  2150. FieldY 
  2151. FieldZ must match are only possible where the fields form a contiguous sequence. With SF it is possible to perform such searches on fields dotted about the record.
  2152. There is no equivalent in QBE to the @= (
  2153. field in the record matches) or @{ (
  2154. field contains) searches which are possible with SF.
  2155. You can't search for text in an external Text or Text Block field. You can with SF.
  2156. You can't include Check-box fields in QBE searches.
  2157. Since QBE doesn't use tags you can
  2158. t force a comparison-by-numeric-value on a non-numeric field (See 
  2159. 3.5.2
  2160. Calculated fields and those belonging to the Stamp class cannot be used by QBE because you cannot type into them!
  2161. If your requirements involve only fairly simple searches then QBE might be just what you
  2162. ve been looking for, but if
  2163.  complex multiple searches are often needed then SF is the one to go for. It is, of course, a simple matter to switch between the two.
  2164. Help available within Powerbase
  2165. As supplied
  2166. Powerbase
  2167.  uses SF as the default query method and the 
  2168. Query by example
  2169.  switch will be deselected when the Match window is displayed. If you want to make QBE the default you can edit the relevant line of the 
  2170. Config 
  2171. file in 
  2172. !Powerbase.Resources 
  2173. to read 
  2174. Query
  2175.  instead of 
  2176. Query SF
  2177. . Don
  2178. t forget the space. Selecting the Print function will then produce the blank record without displaying the Match window at all.  There is, of course, no 
  2179. Print
  2180.  button to click with the mouse after you have entered the target strings so you tell 
  2181. Powerbase
  2182.  proceed by typing the Print key after entering the data to be matched.
  2183. Other features of the 
  2184. Query panel
  2185.  and 
  2186. Match window
  2187. At the far left of the Match window is a group of four radio buttons labelled 
  2188. Print
  2189. Count
  2190.  and 
  2191. Clear
  2192. . Only one of these may be selected at a time and the default action button at the bottom right of the window reflects whichever one you select. When the Match window is opened it is always 
  2193. Print
  2194.  which is selected, this being the most often used feature. If you merely want to know how many records match a specified set of criteria, without printing them, select 
  2195. Count
  2196. . The number of matching records appears to the left of the 
  2197. Cancel
  2198.  button (which merely closes the window).  
  2199.  and 
  2200. Clear
  2201.  are explained in section 
  2202. 3.8.2
  2203.  below.
  2204. The icon to the left of 
  2205. Cancel
  2206.  indicates the selected output destination (see 
  2207. ) by displaying a representation of a window, a text-file icon, or a printer. In the latter case the icon will be shaded if no printer driver is loaded. Clicking with SELECT on the icon opens the Print Options window.
  2208. , as stated earlier, retrieves the last search formula used. The action of the
  2209.  Case
  2210.  and 
  2211. Reverse
  2212.  switches has also been described (see 
  2213. 3.5.1)
  2214. Print options window, displaying
  2215.  opens the 
  2216. Help window
  2217.  which offers another way of building 
  2218. search formula
  2219. e which might appeal to beginners. Select the target field by cycling through the 
  2220.  with the bump icons or by choosing from the pop-up menu.  Choose the 
  2221. comparator
  2222.  by selecting a radio button. Type the target value into the writable icon. Place the caret in the Query panel writable icon and click 
  2223. Add to formula.
  2224.   The 
  2225. search element
  2226.  will appear at the caret.  You may click on 
  2227. and enter other search elements in the same way. If you wish to use
  2228.  button you must do so 
  2229. before
  2230.  clicking 
  2231. Add to formula
  2232. Powerbase
  2233.  inserts the brackets round the 
  2234. search element
  2235.  for you. 
  2236. Search formulae and Help window
  2237. Holding down Ctrl and clicking on a field with SELECT while the caret is in the 
  2238. Query panel
  2239.  causes the tag of the field to be entered in the 
  2240. search formula
  2241.  at the caret. This, together with the above method of constructing 
  2242. search formula
  2243. e, largely overcomes the problem (especially when using someone else
  2244. s database) of not remembering what the field 
  2245.  are.
  2246. key, inclusion in reports
  2247. record numbers in reports
  2248. 3.7.1
  2249. Printing records from more than one subfile
  2250. Reports are usually created from records in the currently-selected subfile which is displayed in the title bar of the record window. Just under the Query panel is the legend 
  2251. Incl.subfiles:
  2252.  and a row of numerals, 0-5. When a database is opened 0 will be highlighted, indicating that reports will only include records from subfile 0. If you change subfile by clicking on the appropriate keypad buttons you will see this highlighting move from one number to another, showing the selected subfile. You can, however, click on these numbers so that any or all of them are selected. Subfiles are deselected with a second click. 
  2253. subfiles, printing from several
  2254. When you create a report from more than one subfile the records are not merged into one alphabetically (or numerically) ordered list; the ordering starts afresh for each selected subfile. This isn
  2255. t really a problem because you can always sort the completed report  on any field to produce a single, ordered list (see 
  2256. 3.1.1
  2257. 3.7.2
  2258. Including record number, key and subfile number
  2259. A group of three option switches in a frame to the left of the query panel allow you to include record numbers, the current key, and the 
  2260. subfile number in a report
  2261. . The latter is especially useful if you have created a report from several subfiles and then sorted it as described above. If you need to keep track of which subfile a record comes create the report with 
  2262.  selected. These three special items are not saved with a print selection file and always appear on a report before any of the selected fields.
  2263. Marking records
  2264.  for inclusion or exclusion
  2265. There are times when you want to print a number of records which have no obvious connection with one another: they may have a common feature which is obvious to 
  2266.  but none within the records themselves.  Such a situation commonly occurs when you want to print a few mailing labels.  No common feature means no basis for constructing a search formula. So how do you tell 
  2267. Powerbase
  2268.  which records you want to print? 
  2269. 3.8.1
  2270. Single records
  2271. A small panel attached to the bottom of the record window
  2272.  contains a check-box, 
  2273. Mark for printing etc.
  2274. , which you can tick to indicate that the displayed record is to be printed.  Using the 
  2275. Search 
  2276. button or the browse controls you can call up each record you want and tick the box. You then simply select the required fields and print in the usual way. If no search formula has been entered then 
  2277. only 
  2278. the marked records will be printed. (Printing without a search formula when no records are marked gives the whole subfile as described in 
  2279. )  If you do enter a search formula you will get the records which match the formula 
  2280.  the marked records, whether the latter match the formula or not.
  2281. printing arbitrary selection of records
  2282. A pop-up menu allows you to invert the effect of this feature so that printing without a search formula gives all records in the subfile 
  2283. except
  2284.  the marked ones and printing with a search formula gives all the matching records 
  2285. except
  2286.  for those marked. When the menu option is set like this (to exclude rather than include) the check box shows a red cross instead of a green tick. 
  2287. marking records for inclusion
  2288. including individual records
  2289. Next to the check-box is the 
  2290. Clear marks
  2291.  button which does exactly what it says. It is shaded when no record is marked. A further indication of whether records are marked is provided by the small rectangle at the far right of the Query panel which is coloured green or red, as appropriate, when any record is marked. This applies to the 
  2292. whole
  2293.  database, by the way, not just to the current subfile.
  2294. marking records for exclusion
  2295. Powerbase
  2296.  takes heed of marked records in any operation which involves the query panel, i.e. batch move/delete, global change, filter, export subset, export CSV file, as well as print. 
  2297. excluding individual records
  2298. 3.8.2
  2299. Groups of records
  2300. It is sometimes useful to be able to mark (or clear marks from) a group of records which fit a search formula. This is made possible by the 
  2301.  and 
  2302. Clear
  2303.  radio buttons on the Match window.  By repeatedly selecting 
  2304.  and executing different query operations you can build up a set of marked records by stages then, if desired, selectively clear the marks from certain ones. Finally, you can print your carefully-tailored selection of marked records without entering a search formula at all. 
  2305. Marking and unmarking records (search formula)
  2306. Printing single records
  2307. There are two methods of printing the displayed record only:
  2308. (a) Hold down Shift whilst clicking with SELECT on the 
  2309. Print
  2310.  button of the Match window or type Shift Print on the keyboard. The highlighted fields of the displayed record are printed using the currently-selected print format as determined by the setting in the Print options window.  If no fields are selected the action is as described in 
  2311. 3.4.2
  2312. Powerbase
  2313.  will use the default selection if it exists or, failing that, print the primary key fields only.
  2314. displayed record, printing
  2315. (b) Follow 
  2316. Export selected
  2317.  from the main menu to a Save box from which may be saved (or dragged to the printer or into a wordprocessor document) a text file containing the highlighted fields of the displayed record. If there are no fields selected the menu entry is shaded.        
  2318. displayed record, exporting 
  2319. Print options
  2320.  window
  2321. Print options window, displaying
  2322. To display this window you can choose 
  2323. Options
  2324.  from the 
  2325. Print
  2326.  submenu, type 
  2327. Ctrl Print
  2328. , or click SELECT on the icon to the left of 
  2329. Cancel
  2330.  on the Match window. Features such as Destination (see 
  2331. ), Format (see 
  2332. )  and the 
  2333. Sort on 
  2334. facility (see 
  2335. 3.2.1
  2336. ) have already been dealt with extensively. The rest are covered here. Default settings appear in brackets after the name of the feature.
  2337. Scrollable lists 
  2338. (as single row) 
  2339. These may be printed in two different ways. The default is for all the cells in the list to be made into a single row with semicolons separating the data from individual rows of the scroller. This can result in very long lines indeed. An option switch (
  2340. Shrink row
  2341.  - ON by default) causes as much white space as possible to be removed, but lines could still be too long for the printer. The alternative format puts the data from each row of the scroller on a separate line so that the data aligns in columns. This occupies less room horizontally but much more vertically.  Experiment! 
  2342. scrollable lists, printing format
  2343. Headings
  2344.  (tags)
  2345. appear at the head of reports in all formats except 
  2346. Label
  2347.  unless 
  2348.  is selected.
  2349. Expand codes
  2350.  (OFF) 
  2351. causes extra data from a 
  2352. validation table
  2353.  to be substituted for (or added to) the coded data in fields linked to such tables (see
  2354. Expand headers
  2355.  (ON) 
  2356. will show the expanded versions (see 
  2357. ) of the target values for fields linked to validation tables in the list header.  Turning the option OFF causes the target values to be shown exactly as typed in the search formula.
  2358. Upper case
  2359.  (OFF) 
  2360. causes all textual output to appear in capital letters. 
  2361. uppercase in reports
  2362. Print 
  2363. header
  2364.  (ON) 
  2365. causes the printing of 
  2366. header
  2367.  lines at the beginning of each page.  The 
  2368. header
  2369.  includes the following information:
  2370. headers in reports
  2371. footers in reports
  2372. The name of the database plus a title, derived from the 
  2373. search formula
  2374. , making it clear on what basis the records have been chosen.
  2375. index
  2376.  used for the ordering, plus the 
  2377. date stamp
  2378.  (if appropriate switch selected).
  2379. An optional description entered in the 
  2380. Title
  2381.  writable icon.
  2382. Title on reports
  2383. column headings
  2384.  as described above.
  2385. The following switch 
  2386. (on p. 1 only: 
  2387. default
  2388.  OFF) 
  2389. limits the 
  2390. header
  2391.  to the first page of a report.
  2392. Print 
  2393. footer
  2394.  (ON)
  2395. Reports in 
  2396. Horizontal
  2397.  and 
  2398. Table
  2399.  format
  2400.  normally end with a 
  2401. footer
  2402.  which specifies the number of records printed.  If the output includes 
  2403. Numeric field
  2404. s and column calculations have been selected (see 
  2405. ) then the results of these too will be part of the 
  2406. footer
  2407. White space in reports, removing
  2408. Date stamp
  2409.  (ON) 
  2410. makes the date and time when the report was created appear as part of the 
  2411. header
  2412. Shrink list
  2413.  (ON)
  2414. Horizontal
  2415. Table 
  2416. format
  2417.  the width of columns is determined by the maximum defined length of the fields included in the print selection. These lengths are often greater than the length of data actually present in the fields, resulting in a lot of 
  2418. white space
  2419.  between columns. With this option ON the surplus space will be automatically removed. Even if it is OFF you can still remove white space via the Report menu (see 
  2420. 3.1.1
  2421. ). Output to 
  2422. Printer
  2423. always
  2424.  removes white space whether this switch is ON or OFF
  2425. Page numbers
  2426.  (OFF) 
  2427. allows page numbers  to appear at the bottom of each page of a report. This feature works quite independently of the 
  2428. Print 
  2429. footer
  2430.  switch. 
  2431. page numbers in reports
  2432. Page length
  2433.  (0) 
  2434. determines the 
  2435. total length of page, including 
  2436. header
  2437. footer
  2438.  and 
  2439. top margin, 
  2440. for destinations other than 
  2441. Printer
  2442.  (for which the page length is determined by the printer driver).  The default value of 0 means no division into pages at all, but you might want to alter this if you drag text-files to the printer. An A4 page is 70 lines long, but you won
  2443. t be able to print on them all and page-feeds might occur in the wrong place. Look at 
  2444. Edit paper sizes
  2445.  on the iconbar menu of 
  2446. Printers
  2447. . Subtract the displayed top and bottom text margins from 70 and enter the value in place of 64, if necessary. In 
  2448. Vertical
  2449. format 
  2450. Powerbase
  2451.  will try to avoid splitting a record between pages, but this can happen if the report includes Text or 
  2452. Text Block
  2453.  fields of greatly varying length. (It will also happen if the number of fields to be printed exceeds the length of the page!) 
  2454. text width in Vertical format
  2455. page length
  2456. Text width
  2457.  (A) 
  2458. specifies the line length used when printing in 
  2459. Vertical
  2460. format. 
  2461.  means 
  2462.  and lets the program calculate the value. You may enter a value of your own (e.g. 70) to override this.
  2463. Spacer
  2464.  (1) 
  2465. specifies how fields printed on the same line will be separated. Fields are first padded with spaces to the maximum width of the relevant data field (but see 
  2466. Shrink list
  2467.  above) and the spacer string is then printed before starting the next field. Three interpretations of the contents of this setting are possible:
  2468. A number by itself means use the specified number of spaces. 
  2469. spacer in reports
  2470. column spacer
  2471. A number followed by a non-numeric character means use a string of the specified number of that character, e.g. 
  2472.  means 3 hyphens. 
  2473. A non-numeric string is used 
  2474. as is
  2475. , e.g.
  2476. . If the former is used when outputting to 
  2477. Printer
  2478.  continuous vertical rules will be placed between columns in 
  2479. Horizontal
  2480.  format.
  2481. 3.10.1 Saving print options files
  2482. All the settings in the Print Options and Printer Setup windows may be saved as a Print Options file. Clicking 
  2483. Save choices
  2484.  with the 
  2485. in database
  2486.  radio button selected brings up the familiar Save box. By default the file is saved in 
  2487. PrintRes
  2488.  under the name 
  2489. PrintOpts
  2490. . As with Selection (see 
  2491. 3.4.1
  2492. ) and Query files (see
  2493.  3.5.5
  2494. ) you can save a default options file called 
  2495. !PrintOpts
  2496.  by selecting the 
  2497. Default options
  2498.  button on the Save box and 
  2499. Powerbase 
  2500. will load this whenever the database is opened. Options files have a large 
  2501.  on their icon and a filetype of &7f5. You may save as many as you wish and load them with a double-click. If the 
  2502. in Powerbase
  2503.  radio button is selected the options are saved as the 
  2504. Powerbase
  2505.  default and no Save box is displayed. 
  2506. Load default
  2507.  reloads this file, overwriting any changed settings. 
  2508. print options files
  2509. Field analysis reports
  2510. Default Query file
  2511. Analysing indexed fields
  2512. Field 
  2513. submenu has an 
  2514. Analyse 
  2515. option which allows you to print a breakdown of the field contents under certain special circumstances:
  2516. (a)  If the field is 
  2517. index
  2518. the menu entry will read 
  2519. Analyse index
  2520. . When chosen it will produce a list of all the values in the 
  2521. index
  2522.  with the number of times each one occurs. e.g. A database of college students might have a field for the school of origin. If there are 20 different schools and if the field is 
  2523. index
  2524. ed then a list of those schools will be generated showing how many students came from each school. 
  2525. (b) If the field contains an 8 or 10 character date (e.g. 19-10-42 or 19-10-1942) the menu entry reads 
  2526. Analyse months
  2527.  and a breakdown by month will be printed. There will be a line for each month showing the number of records for that month. For example, this could be used in an orders database to find out quickly how many orders were received or dispatched each month. This feature works on editable 
  2528. Date field
  2529. s and also on 
  2530. Date stamp
  2531. 8 and 
  2532. Date stamp
  2533. 10 fields in the Stamp class. 
  2534. Analysing Date fields by month
  2535. It is, of course, possible for a field containing a date to be 
  2536. index
  2537. ed. Action (a), above, takes precedence in such a case. You can, however, force action (b) instead by first selecting the field with ADJUST, then choosing from the menu. For cases not described above the menu entry simply says 
  2538. Analyse 
  2539. and is shaded. Printing is always to a window (from which the report may, of course, be saved); the 
  2540. Destination 
  2541. buttons in the 
  2542. Print options
  2543.  window have no effect.
  2544. Subsidiary indices
  2545.  and 
  2546. printing speed
  2547. Speeding up printing
  2548. Try the following experiment using the sample database 
  2549. Elements 
  2550. Create a subsidiary index, if one doesn
  2551. t already exist, on the Group field (see 
  2552.  for the way to do this). 
  2553.  make the index case-specific
  2554. Enter the formula 
  2555.  and click 
  2556. Print 
  2557. with ADJUST so that the Match window remains open. Note the time taken for creating the report. 
  2558. Deselect the 
  2559.  button and repeat the process.  The time will be shorter.  You might also notice the brief appearance of a numeral (probably 1) in the small rectangle to the right of the search formula in the Query panel.
  2560. The speed increase is most noticeable with a slow machine such as an A3000.  On a StrongArm RiscPC and with such a small database both times will be so short that the user
  2561. s reaction might be 
  2562. So what?
  2563.  but when dealing with databases of thousands of records the improvement can be quite dramatic.
  2564. What happens is that 
  2565. Powerbase
  2566.  detects the fact that there is an index based on the Group (GP) field, goes straight to the first occurrence of 
  2567.  in that index then prints records for as long as the key remains 
  2568. .  The number briefly displayed in the Query panel is the number of the index being used and its appearance shows the user that a subsidiary index is being used.  If you look at the header of the report you will see that it says 
  2569. Ordered by GP index
  2570.  whereas the first time it said 
  2571. Ordered by PrimaryKey
  2572. .  The speed-up only works when the all following conditions are met:
  2573. The search formula must include a simple comparison for equality, i.e. of the type TAG=target, 
  2574. without
  2575.  alternatives: no OR, no tag list,  no target list. 
  2576. OR in search formulae
  2577. whole
  2578.  of the field represented by TAG must be indexed.
  2579.  switch
  2580.  on the 
  2581. Query panel
  2582.  must be set to agree with the index, i.e. it must be selected if the index is case-specific and deselected if not.
  2583. +7    ~w7
  2584. o2    ~w7
  2585. gv    ~w7
  2586.  a    ~ 7
  2587. * In this section we will often have occasion to refer to text typed by the user. Such text will be distinguished by the use of the Corpus Medium font, e.g.
  2588. * If this panel is not present type 
  2589. Ctrl M
  2590. , which toggles the feature on and off. With the default settings of 
  2591. Powerbase
  2592.  the mark panel is displayed but it can be turned off by an option in the 
  2593. Config
  2594.  file (see 
  2595. ). Even so, 
  2596. Ctrl M
  2597.  will always bring it back.
  2598. Ch 4 
  2599.  Creating a New Database
  2600. Five steps are involved in setting up a new database:
  2601. Create the database 
  2602. application shell
  2603.          
  2604. Design the 
  2605. record layout
  2606.          
  2607. Specify the 
  2608. number of records
  2609.  the database is to contain.         
  2610. Specify the 
  2611. primary key
  2612. .         
  2613. Build the 
  2614. empty database
  2615. Creating the database application shell
  2616. You need to have 
  2617. Powerbase
  2618.  installed on the iconbar but with no database open, i.e. 
  2619. No data
  2620.  should appear under the icon. Click SELECT over the icon and a 
  2621. Save box
  2622.  will appear containing the default name 
  2623. !Database
  2624. . Type in the name of your database and drag the icon to a directory window. Remember that, for RISC OS versions prior to 4.00, the name cannot exceed 10 characters, including the initial 
  2625. . If you enter more the name will be truncated and you could end up overwriting an existing database with a similar name. You don
  2626. t actually need to enter the 
  2627. Powerbase
  2628.  will insert it automatically.          
  2629. Menus directory
  2630. If you open the newly-created application directory (Shift double-click) you will find that it contains four files (
  2631. !Run, !Sprites,
  2632. !Sprites22
  2633.  and 
  2634. Data) 
  2635. and five directories (
  2636. Indices
  2637. Menus
  2638. PrintJobs
  2639. PrintRes
  2640. ValTables
  2641. ).  All 
  2642. Powerbase 
  2643. databases expect these objects to be present so don
  2644. t delete any of them. 
  2645. Designing the 
  2646. record layout
  2647. When you created the application shell you were left with a window on screen, blank apart from a grid of blue lines, and it is here that you must design the database record. This is the lengthiest part of setting up a database, although efforts have been made to render it as easy as possible. If you have closed the window just click SELECT on the 
  2648. Powerbase
  2649.  icon on the iconbar to re-open it. 
  2650. 4.2.1
  2651. Simple 
  2652. field creation
  2653. Clicking MENU over the window brings up the 
  2654. New database
  2655.  menu on which every item except 
  2656. Create field
  2657.  and 
  2658. Grid 
  2659. is shaded at this stage. Choosing 
  2660. Create field
  2661.  displays the 
  2662. Field Definition window
  2663.  which lets you specify the characteristics of a field. 
  2664. Grid 
  2665. allows you to choose options for the grid used to lay out the fields. This grid appears only at the design stage, not on a working database (except when using the 
  2666. Adjust format
  2667.  and 
  2668. New record format 
  2669. features). It may be turned off but you will probably find it a help in getting the field layout as you want it.  There are options to choose the colour of the grid, whether it is represented by solid or dotted lines and what the spacing between the lines is.  By default the grid has solid, light blue lines spaced 32 OS units apart and  fields will 
  2670.  to it at intervals of 4 OS units.  The 
  2671. snap interval
  2672.  may be altered or the snapping disabled.  First decide what class of field you want to create. There are eight such classes, selected via radio buttons: 
  2673. Editable
  2674. Computed
  2675. Scrollable list
  2676. Stamp
  2677. Check-box
  2678. Keypad button
  2679. External
  2680. Extra button
  2681. For the present we will confine ourselves to the first, which is the default selection. As well as the field class you must decide on the type of field within the class. The default offered is 
  2682. Unrestricted
  2683. , meaning that it will accept all printable characters. We
  2684. ll look at other types later. 
  2685. Decide on a name for the field and enter it in the 
  2686. Descriptor 
  2687. icon. This is the name which will appear on the 
  2688. record window
  2689.  and may be up to 40 characters long. You must also enter a 
  2690. , which is used to identify the field in 
  2691. search formula
  2692. e and is limited to 4 characters. Next enter the
  2693. Data length
  2694. ; the maximum number of characters the field is to hold. Values up to 246 are allowed. Now click on 
  2695. Create 
  2696. and the field will appear on the 
  2697. record window
  2698. s probably not where you want it so use SELECT to drag the white rectangle to the position required. When you drop the field in its new position the 
  2699. descriptor
  2700.  falls into place too. If you want the 
  2701. descriptor
  2702.  somewhere other than to the left of the data icon (above it, for example)  move it by itself 
  2703. after 
  2704. positioning the data icon.  For fine adjustment re-open the 
  2705. Create
  2706.  window by double-clicking on the field and nudge the field into position using the bump icons at the bottom left corner.
  2707. To edit an existing field you can either click MENU over the field and choose 
  2708. Edit field 
  2709. or simply double-click SELECT over the field itself as above.  You can also display the data for any field by clicking MENU anywhere in the window and choosing the field from the 
  2710. Fields Created
  2711.  submenu or by clicking the 
  2712. List fields
  2713.  button on the open dialogue box.
  2714. After making changes click on 
  2715. Update 
  2716. Create 
  2717. will be shaded).
  2718. 4.2.2
  2719. Deleting, inserting and 
  2720. re-ordering fields
  2721. Deleting fields
  2722. Inserting fields
  2723. It is important to understand the difference between the 
  2724. physical position
  2725.  of fields on the screen and the 
  2726. internal numbering
  2727.  of the fields. The former is purely a matter of appearance and you may drag the fields about the screen to your heart
  2728. s content, but the latter is fundamental to the way the database will function.  Each field has a number which corresponds to the order in which it was created.  Whenever you invoke the 
  2729. Field Definition window
  2730.  the title-bar shows either the number of the (new) field you are about to create (e.g. 
  2731. New field 3
  2732. ) or the number of the (existing) field you were pointing at when you opened the menu (e.g. 
  2733. Modify field 5
  2734. ).  The numbering of fields determines the order in which they will be 
  2735. visited
  2736.  by the caret when you are actually using the database and typing Return to get from field to field, i.e. the editing order.
  2737. A field may be deleted by bringing it up for editing as described above and clicking on 
  2738. Remove field
  2739. . Fields which come after the deleted field will then be found to have had their field-numbers reduced by 1.  Inserting a field into the middle of the existing field-sequence is obviously a little more complicated because we have to specify where in the sequence the new field goes.  You need to know the number of the field which you want to follow the new one. This number is entered in the 
  2740. before
  2741.  icon before you click on 
  2742. Create
  2743. . The layout of this part of the window should make things clear: 
  2744. Create
  2745.  before <n>
  2746. . If you examine fields which come after the insertion you will see that their numbers have increased by 1.
  2747. You can change the numbering of a field by removing it and then re-inserting it, but  there is a better way.  Bring the field up for editing as previously described. We will call this the 
  2748. current field
  2749. . Enter the number of another existing field in the same place as was used above to specify the insertion position of a new field. We
  2750. ll call this the 
  2751. entered field
  2752. . You may then do one of the following: 
  2753. fields, re-ordering
  2754. Click 
  2755. Swap with
  2756. . This does exactly what you would expect. It swaps the positions of the current field and the entered field in the field sequence (but not their placement on-screen).
  2757. Click 
  2758. Renumber as
  2759. .  This is a bit more complicated. The current field acquires the number of the entered field. If this involves giving the current field a lower number than previously the fields beyond the new position are all moved up one place to open a gap for it, at the same time closing up the gap left by moving the current field from its old position. If it is being given a higher number the fields above its old position all move down one place, closing up the gap left by its removal and opening a gap in the required place farther up the sequence. (Once again, the physical position of the fields on the window is unchanged.)
  2760. 4.2.3
  2761. Moving and re-sizing the 
  2762. bounding box
  2763. Left to itself 
  2764. Powerbase
  2765.  makes all its field icons the same height and of a suitable length to contain the number of characters specified in 
  2766. Data length
  2767. . This may not be quite what you want. If the 
  2768. data length
  2769.  is large the field could run off the right edge of the window. You might also want to make the field taller for emphasis. (But 
  2770. for displaying multiple lines. Only fields of 
  2771. Text block
  2772.  type can be multi-line. These are discussed later.)  
  2773. bounding box, moving and re-sizing
  2774. We have already seen how you can alter the position of a field by dragging with SELECT. By dragging at an edge with ADJUST you can change the size of the bounding box.  
  2775. You can also specify both size and position by entering the required width and height of the bounding-box in the 
  2776.  and 
  2777.  icons and the co-ordinates of the lower-left corner 
  2778. in the 
  2779.  and 
  2780.  icons
  2781.  of the 
  2782. Field creation window
  2783. All these values are in OS units (the same units as are used for plotting to the screen) but the origin is the 
  2784. left corner of the 
  2785. record window
  2786. . This means that the Y values are always negative.
  2787. Clicking on 
  2788.  automatically sets the bounding-box width to fit the data length.
  2789. 4.2.4
  2790. More about 
  2791.  and 
  2792. descriptors
  2793. tags, importance of
  2794.  are very important in 
  2795. Powerbase
  2796. . They are used when querying the database to produce reports, export 
  2797. CSV files
  2798.  etc. and also by some internal operations. Every printable field (see 
  2799. ) must have a tag and no two  tags can be the same. 
  2800. Descriptors
  2801.  are less important. They are there to provide visible labels for fields and in some cases you may not need one at all. e.g. You might want the record to look like this:
  2802. There are 5 fields here but, having given the second one the 
  2803. descriptor
  2804.  ADDRESS, you don
  2805. t really want 
  2806. descriptors
  2807.  for the remaining 3 (except perhaps POSTCODE for the last). It is quite in order to have null 
  2808. descriptors
  2809.  like this, but your 
  2810. must 
  2811. give each field a tag. Suitable ones might be NAME, ADD1, ADD2, ADD3, CODE. (Remember each must be unique and not more than 4 characters.) 
  2812. null tags, where permitted
  2813. omit the tag where the Data length is 0. This allows you to create fields which are simply explanatory labels. Since there is no data in them there would be no reason to include them in a query. 
  2814. 4.2.5
  2815. Other types of Editable field
  2816. So far we have only used fields of Unrestricted type. Clicking on bump icons to the left of the field type, or on the menu button to the right, lets you cycle through the various types available. These are:
  2817. Unrestricted
  2818. Accepts any printable character.
  2819. Alphanumeric
  2820. Accepts all letters and numerals and common punctuation.  
  2821. Upper case
  2822. Accepts capital letters and numerals only. 
  2823. Numeric
  2824. Accepts numerals, +, 
  2825.  and . (decimal point).
  2826. Yes/No/Maybe
  2827. Accepts Y, N and ? only.
  2828. Date 
  2829. Accepts dates in the form dd-mm-yy or dd-mm-yyyy, checking that
  2830. the date is valid and reporting an error otherwise. 
  2831. Accepts times in the form hh:mm:ss up to a value of 23:59:59. The
  2832. time is checked for validity and errors are reported. 
  2833. Internet
  2834. Special field for email addresses and web URLs. There is no restriction 
  2835. on character input, but double-clicking will call up your mail program
  2836. browser (if it has been 
  2837.  by the filer) with the address loaded.
  2838. When Numeric is selected, certain icons in the dialogue box which are normally shaded become available. Thus, you can specify floating-point, fixed-point or integer format by means of a group of radio buttons. You may also specify a maximum and 
  2839. minimum value
  2840.  for numbers which may be entered in these fields. The 
  2841. Numeric min
  2842.  icon is also used to hold the starting value for Sequence number fields (see 
  2843. 4.2.10
  2844. Date field
  2845.  should be either 8 or 10 characters long in order to hold the date in one of the two formats specified above. The hyphen separator in these dates may be changed via the 
  2846. Preferences window
  2847.  (see 
  2848. 14.5.1
  2849. ).  Powerbase is very tolerant of the way you actually enter a date. You may type 
  2850. non-numeric character as a separator: 
  2851. Powerbase
  2852.  will make sense of an entry such as 4/5/87, converting it to 04-05-87 when you type Return. Arithmetic may be performed on dates held in this type of field, e.g. you could have a Calculated field subtract the contents of two Date fields and display the difference in days (see 
  2853. 6.1.5
  2854. Time fields
  2855.  also allow flexibility in how you enter the values. If you enter 3.45;9 it will be reformatted as 03:45:09. The colon separator may be changed via the 
  2856. Preferences window
  2857.  (see 
  2858. 14.5.1
  2859. ). You may also enter incomplete times which are, by default, interpreted as follows. A number entered on its own is treated as hours. Thus, if you enter 6 and type Return it will be reformatted as 06:00:00. Two number separated by a non-numeric character are treated as hours and minutes, e.g. 6/5 would be reformatted as 06:05:00. You may edit 
  2860. Powerbase
  2861. s Config
  2862.  file to reverse this behaviour so that 6 is formatted as 00:00:06 and 6/5 as 00:05:06. When using this mode of entry you may also suppress the hours part of the display for values less than an hour, e.g. so that 6/5 is formatted as 05:06. (See 
  2863.  for editing 
  2864. Config.
  2865. time fields, interpretation of input
  2866. Like Date fields, Time fields may be included in calculations, e.g. to obtain the difference in seconds between two times or to average a number of times (see 
  2867. 6.1.4
  2868. scrollable lists, where to use
  2869. 4.2.6
  2870. Scrollable lists
  2871. These are also user-editable but are treated separately because they are like no other editable field.  They are intended for record structures which contain closely-related data whose number might vary widely from one record to another. A music CD, for example, might have only 3 or 4 tracks but it could have 30 or more. If you are cataloguing CDs and including track information you don
  2872. t really want to define 30 separate fields to allow for just a few extreme records 
  2873.  and find even then that the odd disc has more than 30 tracks! A scrollable list lets you make allowance for a modest number of items, adding new ones as required for individual records. Since the list is scrollable it occupies no more space on the record window no matter how many items are in the list. 
  2874. data length in scrollable lists
  2875. scrollable lists, rows visible
  2876. You may create this type of field with anywhere from 1-4 columns. The value entered in 
  2877. Data length
  2878.  is the column width, i.e. the number of characters which each cell can hold. All columns are normally of the same width (but see below for how to specify differing widths). When you click 
  2879. Create
  2880.  all that appears is a plain white rectangle: not until you complete the process of creating the database does it appear with the cells and vertical scroll-bar characteristic of this type of field. The height of this rectangle will determine the height, and hence the number of visible rows, in the list. By default it will accommodate 3 rows but you may drag with ADJUST to make it higher. When you release the mouse button the rectangle will snap to a height which exactly fits the nearest whole number of rows. 
  2881. scrollable lists, unequal columns in
  2882. As noted above, you can make the columns differ in width. The field is created as above and the other steps to produce a working database are carried out. You then need to create a little text file called 
  2883. Format 
  2884. containing the individual column widths, 
  2885. one to a line
  2886. . There must be as many numbers as columns and 
  2887. the sum of the new column widths must be exactly the same as it was before
  2888. . Suppose you had created a 3-column scrollable list with a Data length of 10, giving 3 columns, each capable of holding 10 characters. This means you have 30 characters to play with. You can put into 
  2889. Format
  2890.  the numbers 5, 15, 10 or 3, 7, 20 or any other 3 numbers which add up to 30. Where do you put the 
  2891. Format
  2892.  file? Open the database directory (Shift-double-click) and look for a subdirectory called 
  2893. Scroll<n>
  2894. , where 
  2895.  is the field number of the scrollable list. 
  2896. Format
  2897.  should go in this subdirectory.
  2898. The data contained in scrollable lists is not held in the 
  2899. Database
  2900.  file. Data for each record is in a separate file stored in a special system of subdirectories inside the database directory. In this they resemble External fields (see 
  2901. 4.2.8
  2902. 4.2.7
  2903. Check-box
  2904.  fields
  2905. These are fields whose status changes when clicked on with SELECT. Five types are defined:
  2906. Cross/tick
  2907. Displays a cross initially. A click changes it to a tick. A second click
  2908. changes it back to a cross.         
  2909. Null/tick
  2910. Similar to (a), but initial state is an empty box.         
  2911. Null/star
  2912. Similar to (b), but second state is a star.
  2913. Null/tick/cross
  2914. This is a 
  2915. three
  2916.  state check box the first state being an empty box.
  2917. Repeated clicking cycles through tick, cross and back to empty box.
  2918. ?/tick/cross
  2919. Another 
  2920. three-state check-box
  2921.  where the first is a question mark.
  2922. Check-box
  2923. es provide the fastest way of entering true/false or yes/no type data and the 3-state types allow for yes/no/undecided situations. If you examine the 
  2924. ValStrings 
  2925. file inside 
  2926. Powerbase.Resources
  2927.  you will find strings associated with each of these five types the latter parts of which read, respectively:
  2928. QNo,Yes                 Q-,Yes                Q-,*
  2929.      QNo,Yes,-           QNo,Yes,?
  2930. These specify what will actually appear in a print-out when a 
  2931. check-box
  2932.  field is included in a query (see 
  2933. ). You may change them if you wish, but don
  2934. t omit the initial Q (although this will 
  2935.  appear in the print-out) and take care not to alter other parts of the string.
  2936. 4.2.8
  2937. External field
  2938. External field
  2939. s allow you to link 
  2940. Powerbase
  2941.  records to pieces of data of a size and type which make them unsuitable for inclusion in an Editable field. Such items are sometimes called 
  2942. BLOBs
  2943. Binary Large Objects
  2944. ) in the PC world. The field types in this class and the types of data linked to them are as follows: 
  2945. Plain 
  2946. text files
  2947. , such as 
  2948. Edit 
  2949. creates.
  2950. Sprite
  2951. Sprite files
  2952. , such as 
  2953. Paint 
  2954. creates.         
  2955. Drawings such as 
  2956. Draw 
  2957. creates.
  2958. Text block
  2959. Plain text files, as for (a). 
  2960. Picture
  2961. Sprite files, as for (b).
  2962. Remote
  2963. Anything!
  2964. When you create a field of type Text, Sprite or Draw it appears on the 
  2965. record window
  2966.  as a button bearing a small version of the icon for 
  2967. Paint 
  2968. Draw 
  2969. respectively. Files of the appropriate type may be dropped on these buttons, whereupon the file is copied into a special system of subdirectories within the database application. Unlike fields of the Editable class the data doesn
  2970. t become part of the 
  2971. Database 
  2972.  within the application (see also 
  2973. 4.2.6
  2974. ); the Text, Sprite or 
  2975. Draw file
  2976.  retains its identity and may be exported for editing in the appropriate application. Clicking on the button in the 
  2977. record window
  2978.  will display the file if the filer knows the whereabouts of the relevant editor (
  2979. Paint 
  2980. Text block
  2981.  and 
  2982. Picture
  2983.  fields take things a step further by actually displaying a text or sprite file on the 
  2984. record window
  2985. . The bounding box of the icon needs to be of suitable size to hold the text or sprite. In the case of a 
  2986. Text block
  2987.  too small a box will cause the text to appear truncated. None is actually lost; it just can
  2988. t all be displayed. Too small a box for a 
  2989. Picture
  2990.  field will cause the sprite to spread beyond its boundaries. (N.B. To display the 
  2991. same 
  2992. sprite on each record, e.g. a company 
  2993. , define the field as of type 
  2994. , not 
  2995. Picture
  2996. .)  the contents of a Text block or Picture field can be loaded into 
  2997. Paint
  2998.  by double-clicking with SELECT.  When the edited text or sprite is saved the 
  2999. Powerbase
  3000.  field will be seen to update.
  3001. Remote fields allow 
  3002.  type of filer object (file, directory or application) to be linked to a button on the record window. They differ from Text, Sprite, and Draw buttons in that the linked object is not copied into the database directory; only its pathname is stored, hence the term 
  3003. Remote
  3004. . This has both advantages and disadvantages. Because no copy is made disc space is saved and the database stays a manageable size; an important factor where large sprites are involved.  On the other hand, if you transfer the database to another computer all references to the linked objects become invalid and might even cause retrieval of files which are quite different from the ones you originally attached to the records!  Similarly, if you move a linked object to some other part of your hard disc the pathname stored by 
  3005. Powerbase 
  3006. will no longer be correct.
  3007. A Remote button normally shows a large, down-pointing arrow inviting the user to drop an object onto it. It will accept files of any type, ordinary directories or applications. Once a link is established the button shows the appropriate file icon or a blue folder or the default application icon. A single click has the same effect as double-clicking the object in a filer window: directories are opened, applications are run, files are loaded into their applications, Obey files and Basic programs are executed. If the linked object can
  3008. t be found 
  3009. Powerbase 
  3010. will be aware that something used to be there and the button will display a question mark. 
  3011. If you wish to break the link between button and file object click MENU over the button, go to the 
  3012. Field
  3013.  submenu and choose 
  3014. Unlink object
  3015. .  The button will revert to its original down-pointing arrow icon.
  3016. The uses of this field type are limitless. You can use it to catalogue your collection of GIFs, JPEGs, sound samples, 
  3017. Sibelius 
  3018. files, 
  3019. Impression 
  3020. documents or whatever. You could even use it as an application launcher, although I
  3021. m sure there are more convenient ones available!
  3022. External fields, unlinking
  3023. The full pathname of a Remote object is stored in the database. Since RISC OS allows pathnames up to 255 characters long they can occupy rather a lot of space in a large database. Powerbase does allow you to specify a maximum pathlength of less than 255 characters but you must be 
  3024. very 
  3025. careful when using it. The value is set in the 
  3026. !Powerbase.Resources.Config
  3027.  file and is called 
  3028. PathLen
  3029. . When an empty database is created it will use whatever value of PathLen is currently configured 
  3030. and it may not subsequently be changed without a complete reformat of the database
  3031. . Be wary, therefore, about reducing the default value of 255 characters. Since, however, it is now possible for databases to have 
  3032. Config 
  3033. files of their own it would be far better to place any lower value of PathLen in such a file and leave 
  3034. Powerbase
  3035. s default at 255. Any attempt to store an overlong pathname in a Remote field will be rejected with an error message.
  3036. 4.2.9
  3037. Computed fields
  3038. Discussion of Computed fields is postponed to 
  3039. Ch 6 
  3040.  Performing Calculations.
  3041. 4.2.10 
  3042. Stamp field
  3043. Stamp field
  3044. s resemble Computed fields in that you cannot edit them; 
  3045. Powerbase
  3046. stamps
  3047.   the fields with the appropriate contents automatically. The following types are available:
  3048. Record number
  3049. Database record number.         
  3050. Sequence number
  3051. Unique value numbered upwards from base value set by user.
  3052. Time 
  3053. Time at which record was created.         
  3054. Date  
  3055.          
  3056. Date on which record was created.         
  3057. Date and time
  3058. Date and time of record creation.         
  3059. Day on which record was created (in the form Sun, Mon, Tue etc or 
  3060. 1, 2, 3 etc, or day of month as 10, 24, 31 etc). 
  3061. Month
  3062.       
  3063. Month in which record was created (as either a string; Jan, Feb, Mar etc
  3064. or a number; 1, 2, 3 etc). 
  3065. Year   
  3066. Year when record was created as four-digit number, e.g. 1993, 2000
  3067. Last altered
  3068. Records the date and time record is first created and updates it only 
  3069. if the record is subsequently altered. Merely displaying the record does 
  3070. cause updating.         
  3071. Allows a sprite to be included as a 
  3072.  on  every record.
  3073. These fields are stamped by 
  3074. Powerbase
  3075.  when a record is first entered and thereafter, with the exception of (i), stay fixed.  (But see 
  3076.  for similar types of field which auto-update.) Note the following:
  3077. When defining Record or Sequence number fields make sure the 
  3078. Data length
  3079.  icon contains a large enough value to accommodate the longest number which will be encountered. For the other types the required field length is already known by 
  3080. Powerbase
  3081.  and the 
  3082. Data length
  3083.  box is therefore shaded.
  3084. The base value from which sequence numbers begin is entered in the 
  3085. Numeric min
  3086.  box. When a record containing such a field is deleted the sequence number is 
  3087.  normally re-used; a new record is given a new sequence number.  This leads to gaps in the numeric sequence and you might want to reassign the numbers so that the sequence is continuous.  You can do so by means of 
  3088. Compact sequence
  3089. from the 
  3090. Field
  3091.  submenu. Before this can be used the sequence number field must be 
  3092. indexed
  3093.  and selected as the 
  3094. current 
  3095. index.   
  3096. Date fields may display the date in any of three formats:
  3097. Sun,01 Aug 1993
  3098. (called 
  3099. Long 
  3100. )         
  3101. 01-08-93                
  3102. (called 
  3103. Date 8
  3104. )         
  3105. 01-08-1993        
  3106. (called 
  3107. Date 10
  3108. (2) and (3) are identical to the formats in which 
  3109. Powerbase
  3110.  displays dates of the ordinary Editable type (see 
  3111. 4.2.5
  3112. ). The numbers refer to the field length occupied by the 
  3113. date stamp
  3114. Logo fields require the name of the sprite to be entered as the tag of the field to be used as a 
  3115. . This means that the sprite name is limited to four characters. The icon for a Logo field (like that of a Picture field) must be large enough to hold the intended sprite. You may have several 
  3116.  fields on your record, all the required sprites being included in a sprite file called 
  3117. UsrSprites
  3118. which is placed inside the database directory.
  3119. 4.2.11 
  3120. Button field
  3121. Any or all of the control buttons on the 
  3122. Powerbase
  3123. keypad
  3124.  may be made to appear on the 
  3125. record window
  3126.  itself. They have exactly the same functions as the 
  3127. keypad
  3128.  equivalents. These 
  3129. button field
  3130. s let you build a customised database which allows the user to use only the features you want him/her to have access to since the 
  3131. keypad
  3132.  and menus can then be suppressed (see 
  3133. ). There is also a group of 
  3134. Extra buttons
  3135.  which have no 
  3136. keypad
  3137.  equivalent:
  3138. Print 
  3139. brings up the 
  3140. Match window
  3141.  for report printing. 
  3142. Print button (on screen)
  3143. duplicates the action of 
  3144. Close database
  3145.  on the iconbar menu. 
  3146. Exit button
  3147. Quit 
  3148. duplicates the action of 
  3149.  on the iconbar menu. 
  3150. Quit button
  3151. Run file button, unlinking
  3152. Run file 
  3153. This type of button displays an icon made up of four different filetype icons. When you drop a file onto the button the icon changes to that of the relevant file and subsequent clicks on the button will run the file. Text files are treated as 
  3154. Powerbase
  3155.  scripts (see 
  3156. Ch 12
  3157. ), other types of file (e.g. Obey files) have their normal Run action. It is important to appreciate the difference between this type of button and a Remote field button (see 
  3158. 4.2.8
  3159. ). The file associated with a Remote field belongs to a 
  3160. specific record
  3161.  and every record can have a different file. The file attached to a Run file button is 
  3162. the same
  3163.  whatever record is being displayed and merely provides a convenient means of executing the file.  To break the link with the file click MENU over the button, go to the 
  3164. Field
  3165.  submenu and choose 
  3166. Unlink file. 
  3167. The name of the file, if required, may be given in the descriptor or the leafname may be made to appear on the button by editing the 
  3168. Config
  3169.  file.
  3170. Directory
  3171. This resembles the previous type. In its initial state the button displays the small directory icon. Dropping a directory onto it changes this to a large directory icon and clicking on the button opens a filer window on the directory.  To break the link with the directory click MENU over the button, go to the 
  3172. Field
  3173.  submenu and choose 
  3174. Unlink directory
  3175. Options in the 
  3176. Config
  3177.  file allow you to determine what the filer window looks like; the default being small icons and alphabetic sorting. The leafname may be displayed on the button. Without it you could confuse 
  3178. Directory 
  3179. Run file
  3180.  buttons with Remote fields. 
  3181. Menu button on screen
  3182. This button lets you associate a data field with a 
  3183. pop-up menu
  3184. .  Clicking the button and choosing a character string from the menu enters it into the data field. The 
  3185. field number
  3186.  of the data field is entered as the 
  3187. of the menu button. This happens automatically if you define the button immediately after the data field.  The menu data is in a text file whose name is the tag of the associated data field plus the word 
  3188. . Put the menu title on the first line of the file and each menu choice on a separate line.  All user-menu files are stored in the 
  3189. Menus
  3190.  subdirectory
  3191.  inside the database directory. If you click on a Menu button without having constructed the relevant menu file you will be given appropriate instructions. 
  3192. User menus, defining
  3193. 4.2.12 
  3194. Mandatory fields
  3195. mandatory fields, colouring of
  3196. This isn
  3197. t yet another class of fields. A mandatory field is one which 
  3198.  be filled in before you can access another record or close the database. It has already been noted that at least one of the primary key fields must not be blank (see 
  3199. 2.4.1
  3200. ), but any Editable field (but not Scrollable list) can be made mandatory by selecting the 
  3201. Must not be blank
  3202.  option button when designing the field. Such fields appear on a working database with red as the foreground colour. (This may be altered via the 
  3203. Colours window
  3204. ; see 
  3205. A short-cut to a working database
  3206. The third item on the 
  3207. New database
  3208.  menu is called 
  3209. Default database
  3210. . Choosing this is by far the quickest way of getting a database up and running. Its action is to create three files inside the application directory. These are called 
  3211. Form 
  3212. (which holds the record design), 
  3213. PrimaryKey
  3214. Database 
  3215. (which will ultimately contain the entered records). The number of records in the database is set to 100, with 25 as the amount by which this should increase when the database becomes full. The 
  3216. primary key
  3217.  is defined as the first four characters of the first 
  3218. Editable field
  3219. . The database is opened and a blank record displayed ready for data entry.  Since you can always alter such things as the 
  3220. database size
  3221.  and 
  3222. primary key structure
  3223.  later, you might wish to use these defaults while you experiment with the database.
  3224. If you want to choose the 
  3225. database size
  3226.  and primary key structure yourself follow the procedure in Sections 
  3227.  and 
  3228. Specifying the 
  3229. database size
  3230. This involves two steps:
  3231. Save the 
  3232. Form 
  3233.  (which contains all the field data). The 
  3234. Save form file
  3235.  menu entry leads to a standard Save box but, since the pathname is correctly set for saving the file inside your database application, all you actually need do is click on the menu item itself. 
  3236. You will now see that the 
  3237. Database size
  3238.  choice is no longer shaded and may be used to reach the Size window in which you specify the number of records in the database and the increment for expanding the database when it becomes full. 
  3239. Specifying the 
  3240. primary key
  3241. Primary key, defining structure
  3242. 4.5.1
  3243. General procedure
  3244. Click MENU and choose 
  3245. Primary key
  3246.   This opens the 
  3247. Key Structure
  3248.  window. The 
  3249. primary key
  3250.  (or any other key) is derived from one or more record fields called 
  3251. key field
  3252. s. Up to four 
  3253. key field
  3254. s may be used to define a key but we will begin by using just one.  Four pieces of information need to be specified:
  3255. Choose the 
  3256. field
  3257. , either by clicking on the bump icons or choosing from the associated pop-up menu.  The default is the first Editable field in the record.
  3258. Enter the 
  3259.  within the field from which characters are to be taken to make up the key.  The default is word 1.  If 0 is entered word boundaries are ignored (see 
  3260. 4.5.2
  3261. Enter the 
  3262. position
  3263.  within the word from which characters are to be taken. L (default) means from start of word, R means take from end.  A number (
  3264. ) means start at the 
  3265. th character.
  3266. Enter the number of characters to be taken from the word. The initially-set value is 4 but thereafter the default is the defined field length. 
  3267. After entering this information click on 
  3268. Create
  3269.  and the empty 
  3270. Database 
  3271. PrimaryKey
  3272.  files will be created, after which the database will open ready for you to start entering records.
  3273. 4.5.2
  3274. Some illustrative examples
  3275. Key field
  3276. s should be chosen with care. An ideal 
  3277. key field
  3278.  is one whose contents would never be repeated in another record. 
  3279. Powerbase
  3280.  lets you enforce this condition if you wish (see 
  3281. 11.2.1
  3282. ) but the default setting allows key duplication. Occasional repetitions may not be serious, but a field which can have only a few 
  3283. values
  3284.  is usually a poor choice. A customer number or membership number is the sort of thing we are looking for but your database may not contain anything like that.  In a database of school pupils the pupil
  3285. s name would be a good choice of key, but the form teacher
  3286. s name would not, since only a small number of names would be involved, each appearing on the record of many pupils. 
  3287. Suppose you decide to use a person
  3288. s name, stored surname first, in a single field whose tag is NAME, as a key. You could use the whole name but it would probably be too long. The first four letters would be more appropriate but, as this is the start of the surname, you might get a lot of duplication. e.g. PRESTON and PRESCOTT would both have the key PRES; and this is before we even consider people whose surnames are identical. To get round this problem, 
  3289. Powerbase
  3290.  lets you construct an alphanumeric key from characters taken from up to 
  3291. four 
  3292. successive words. You will seldom need to go so far. In the present case a five-letter key made up from the first four letters of the surname and one letter of the forename would be good enough for most purposes. 
  3293. Set up the 
  3294. Key Structure
  3295.  window as follows:
  3296. Key structure, examples
  3297. Field             Word              Position
  3298.              Chars
  3299. 1st row:
  3300. 2nd row:
  3301. This works quite well.  Smith Peter and Smith Janet would have the 
  3302.  SMITP and SMITJ. Duplication can still occur, but not often enough to be a serious problem.
  3303. Further examples illustrate the use of letters from different parts of words in the key field.  The following settings of 
  3304. position 
  3305. characters
  3306.  would produce the 
  3307.  shown from the name Herring Albert.  (a)
  3308. (d) use the Surname only, (e) and (f) use the Forename only, the rest use both names:
  3309.                   
  3310. From Surname                 From Forename
  3311.      
  3312. Word     Pos    Chars       Word     Pos    Chars
  3313. HERRI
  3314.   (stops at word end)
  3315. HERRALBE
  3316. ALBING
  3317. RINER
  3318. GALBERT   (ignores breaks)
  3319. RINGAL      (ignores breaks)
  3320. Take particular note of what happens if the word number is entered as 0 (or left blank).  All breaks between words are then ignored.  The field is treated as if the blanks between words had been removed leaving a single long word which is then subjected to the process specified by the position and characters icons.  When, on the other hand, the word number is 1 or greater the scanning for characters stops when the end of the word is reached so that the key might be shorter than the character length specified. Example (d) illustrates this.  
  3321. 4.5.3
  3322. Using more than one field in a key
  3323. You might, of course, want to store surname and forename in 
  3324. different 
  3325. fields. Let
  3326. s call their 
  3327.  SNAM and FNAM.  To produce the five-letter keys given in our first example the key definition would be:
  3328. Field             Word              Position
  3329.              Chars
  3330. 1st row:
  3331. 2nd row:
  3332. and the 
  3333.  generated will be exactly the same as they would be for the single field NAME.
  3334. There are databases where no single field is suitable for constructing the 
  3335. primary key
  3336. .  In a database of classical music, for example, there would probably be one field for the composer
  3337. s name and one for the name of the work. Neither is much use individually; the former could contain many occurrences of Mozart or Beethoven and the latter many repetitions of Symphony No. 5 or String Quartet in D minor. 
  3338. This is the kind of situation where you might want to use two fields and as many as four words, taking one word from the Composer field and three from the Work field using, say, 4, 3, 3 and 2 characters respectively from them.  The following two works then give the 
  3339.  shown (characters taken from the left in each case): 
  3340. key structure, multiple fields in
  3341.   BEETHOVEN  Symphony No 5:
  3342. BEETSYMNO5                 
  3343. MOZART Piano concerto 23:
  3344.              MOZAPIACON23 
  3345. Note the following points in these examples:              
  3346. If a word is shorter than the number of letters assigned to it (
  3347.  in the first example) then the whole word is used but no padding is inserted.
  3348. It may be necessary to omit an insignificant word (
  3349.  in the second example), in order to make a significant one (
  3350. ) come in the first four words of the combined key fields. 
  3351.  It is not usually sensible to build up 
  3352.  derived from 
  3353. Numeric field
  3354. s out of separate bits in this way and, indeed, 
  3355. Powerbase
  3356. t allow you to do so. Numeric 
  3357.  should use one key-field only, the key being the actual 
  3358. numeric value
  3359.  of the field contents.
  3360. Case and indexing
  3361. Index, case-sensitive
  3362. 4.5.4
  3363. Other matters concerning keys
  3364. We have already noted that a word shorter than the number of characters specified is used just as it is, resulting in a short key. There might be times when you want short words padding out with spaces to give a key of full length and there is a switch to select this action in the 
  3365. Key Structure
  3366.  window.
  3367. A final factor to be decided is whether the 
  3368. index
  3369. ing is to pay attention to the case of letters, i.e. if they are capitals or small letters By default 
  3370. index
  3371. ing is 
  3372. case-sensitive. Thus if a record has the word 
  3373. Horse
  3374.  as the contents of a 
  3375. key field
  3376.  and the first four letters are used as the key then the entry in the 
  3377. index
  3378.  will be 
  3379.  and you may search for it by entering 
  3380.  etc.
  3381. This may not be what you want. If you require 
  3382. index
  3383. ing to be case sensitive select the switch labelled 
  3384. . Forcing to upper case as described above does not then take place: 
  3385.  are inserted and strings are searched for 
  3386. as is
  3387. . The field containing 
  3388. Horse
  3389.  will be 
  3390. index
  3391. ed as 
  3392.  and only that precise combination of upper and lower case letters will successfully find it. 
  3393. Alphanumeric 
  3394.  will be ordered according to the ASCII values
  3395.  of the letters. Since lower-case letters come later in the ASCII table than upper-case ones a record containing 
  3396.  would appear 
  3397. after
  3398.  one containing 
  3399. Horse
  3400. , whereas one containing 
  3401.  would come before 
  3402. Horse
  3403. Building the empty database
  3404. Once you are satisfied click 
  3405. Create
  3406.  and blank 
  3407. Database
  3408.  and 
  3409. PrimaryKey 
  3410. files will be created. The 
  3411. record window
  3412.  is redrawn and you may start entering data at once. 
  3413. empty database, building
  3414. Renaming a database
  3415. Use the 
  3416. Rename database 
  3417. option on the 
  3418. Miscellaneous 
  3419. submenu to do this.  If you rename via the filer your database will lose its 
  3420.  icon and revert to the default application icon (
  3421.  with 
  3422. Archimedes
  3423. , or 2 large exclamation marks if you have RISC OS 4). 
  3424. Rename database
  3425.  is duplicated on the iconbar menu so that you can rename at the record-design stage.
  3426. Database, renaming
  3427.  will
  3428. These three may be reduced to a single mouse-click if you use the
  3429. Default database
  3430.  option
  3431.    NAME  
  3432. Fred Bloggs 
  3433. ADDRESS
  3434. 27, Every Street
  3435.      
  3436. Anytown     
  3437.      
  3438. Woolshire
  3439.      
  3440. WL4 7XZ 
  3441. * ASCII stands for American Standard Code for Information Interchange.  Each uppercase letter, lowercase letter, numeral, punctuation mark etc. corresponds to a number in the range 32
  3442. 255. (Numbers below 32 are non-printing 
  3443. control
  3444.  characters.) e.g. the numerals 0
  3445. 9 have consecutive ASCII values from 48
  3446. 57, the uppercase letters have consecutive values 65
  3447. 90 and the lowercase letters from 97
  3448. 122. The numbers are
  3449.  used to store the characters within the computer and on disc.  Ordering strings according to their ASCII codes means that those beginning with a numeral will come before those beginning with an uppercase letter and the latter will come before those beginning with a lowercase letter.
  3450. Ch 5 
  3451.  Input Validation and Validation Tables
  3452. Powerbase 
  3453. can apply two kinds of data input 
  3454. validation
  3455. Character 
  3456. validation
  3457. Table 
  3458. validation
  3459. Character 
  3460. validation
  3461. This means exercising control over what characters a field will accept. RISC OS provides the means to allow writable icons to accept only certain characters, or ranges of characters, and reject others. The disallowed characters are simply ignored so that attempts to type them have no effect. 
  3462. If you Shift/double-click on the 
  3463. Powerbase 
  3464. icon the contents of the application directory will be displayed. In it you will see an ordinary directory called 
  3465. Resources 
  3466. and inside 
  3467. Resources 
  3468. you will find a file called 
  3469. ValStrings
  3470. . You are recommended not to alter this file unless you understand exactly what you are doing and to keep a copy of the original. Examining it can, however, give you an insight into the 
  3471. validation
  3472.  process. Look, for example, at the entry 
  3473. 03 Number
  3474. . This refers to field type 3 (Numeric). The line below is the 
  3475. validation string
  3476.  of the writable icon which makes up a 
  3477. numeric field
  3478. . It looks like this:
  3479. A0-9.+\- ;Pptr_write,4,4;KD
  3480. The initial 
  3481.  is a command which signifies 
  3482. Allow
  3483.  and is the part of the 
  3484. validation string
  3485.  which especially concerns us. It determines what characters the field will allow you to type. In this case they are the numerals 0-9, the decimal point, plus and minus signs and <space>. Why the back-slash before the minus sign? Because 
  3486.  is a special character in an icon 
  3487. validation
  3488.  string (used, as in this example, to specify a range of characters) and so are the semicolon, tilde (~) and the backslash itself. To include any of these four characters in the 
  3489. validation
  3490.  string you must precede it with a backslash.  The next character is a semicolon which indicates that a new command follows. 
  3491.  which comes next is the command 
  3492. pointer
  3493. ptr_write
  3494.  is the name of the sprite used to represent the mouse pointer when it is over this type (and many other types) of field. You will have noticed that the usual RISC OS arrow changes to a blue vertical bar, somewhat resembling the caret, when over a writable field. 
  3495.  specifies the 
  3496. active point
  3497.  of the pointer.
  3498. A couple of further examples should be sufficient. 
  3499. 01 Alphanumeric
  3500.  uses the same pointer type but the characters accepted are <space> (immediately after the 
  3501.  for 
  3502. allow
  3503. ), the upper-case letters A-Z, the lower-case letters a-z, the numerals 0-9, some common punctuation and the 
  3504.  character. You might want to add to this list. 
  3505. 06 Calculated
  3506.  uses a different pointer sprite (ptr_calc, which resembles a pocket calculator) and has no 
  3507. Allow
  3508.  command at all. (You can
  3509. t type into this type of field; its value is calculated from other fields.)
  3510. Validation tables
  3511. Table validation is used where a record field is only allowed to have certain 
  3512. values
  3513. . A manufacturing company, for instance, will have a product code for every item it makes and a database of customers which the firm supplies will make use of such codes to identify the items. It is essential that whoever enters data is prevented from typing a spurious code. This can be achieved by linking the appropriate field to a 
  3514. validation table
  3515. . Fields linked in this way are recognizable by having their text dark green instead of black. 
  3516. Powerbase
  3517.  will allow you to type invalid data into the field 
  3518. initially 
  3519. but, when you click the mouse over a new field or type Return, the linked 
  3520. validation table
  3521.  is scanned to see whether what you entered in the field is on the 
  3522. allowed list
  3523. . If it isn
  3524. Powerbase
  3525.  will restore the previous contents of the field and print an error message.  
  3526. Validation table
  3527. s have other uses too. They can have extra columns containing other data about the products, such as a name and a brief description, and lists can be printed in which this more informative data appears instead of the codes.  You can also have 
  3528. Powerbase
  3529.  replace the typed-in code with a longer, more readable, form immediately on entry. Provided the substitute data will fit in the field, replacement occurs when you type Return or click the mouse in another field. If the replacement is too long then the typed-in data will be unchanged.  This can be a great timesaver when a lot of data has to be entered.
  3530. The F.E. college database referred to in 
  3531. 2.2.5
  3532.  makes extensive use of 
  3533. validation table
  3534. s for subjects, courses, tutors and schools of origin. Not only does this trap typing errors but the data entry is greatly speeded up when one can type 
  3535. instead of 
  3536. English Language and Literature
  3537. , yet have the latter printed out on a list by selecting the 
  3538. Expand
  3539.  switch in the Print options window.
  3540. Creating a 
  3541. validation table
  3542. Choose 
  3543. Create table
  3544.  from the 
  3545. Validation
  3546. submenu. Give the table a suitable name and enter the number of rows required. This will be the maximum number of items on the 
  3547. allowed list
  3548. . (It is possible to increase the number later if necessary.) Next place the caret in the first row (row 0) of the scrolling list and enter the 
  3549. width 
  3550. (in characters) and the 
  3551. heading 
  3552. (optional) for the first column of the 
  3553. validation table
  3554. If the table is to be used to constrain data entry to an 
  3555. allowed list
  3556.  one column may be all you need. The most common situation, however, is to have two columns, the first holding the 
  3557. allowed list
  3558.  and the second being an expansion or explanation of the former. Use the next row of the scrolling list to enter the column width and heading for the second table column.  It is possible to use very large and complex 
  3559. validation table
  3560. s with all kinds of data associated with each item on the 
  3561. allowed list
  3562. . There is room to specify 20 columns, but even this can be increased if necessary (see 
  3563. You can if you wish choose the foreground and background colours of both the heading and the body of your table by clicking repeatedly with SELECT or ADJUST on the 
  3564. Heading
  3565.  and 
  3566.  icons. Whether this changes the foreground or background colour depends on which of the two radio buttons is selected. 
  3567. When you are satisfied with the data click 
  3568. Create
  3569.  and the table will be created and displayed. It is not saved on disc at this stage.  You may enter data into it now or later. Entries may be freely altered and overwritten. The table will be saved when you close the database or quit 
  3570. Powerbase
  3571.  but, if you want to play safe, click 
  3572. Force update
  3573.  on the 
  3574. keypad
  3575. Linking tables to fields
  3576. To link your newly-created 
  3577. validation table
  3578.  to a field click MENU over the field and choose 
  3579. Link to table
  3580.  from the 
  3581. Field 
  3582. submenu.
  3583.   A pair of bump icons, with the usual pop-up menu alternative, lets you cycle through the tables in memory.  When you have the name of the required table displayed choose the column of the table to which the field is to be linked. It is recommended that column 0 normally provide the link (and therefore contains the data items for the 
  3584. allowed list
  3585. ) and this is set by default. You may, however, link to any column in the table and another pair of bump icons lets you cycle through the column numbers. 
  3586. Select 
  3587. Linked to table
  3588.  and click on 
  3589. . You will see that the foreground colour of the linked field has now  changed from black to green. Place the caret in the field and click on 
  3590. List values
  3591.  on the 
  3592. keypad
  3593. . The 
  3594. validation table
  3595.  should be displayed. 
  3596. Scrollable lists and validation tables
  3597. You may link a validation table to a scrollable list.  The link is to a specified column of the list (make sure the pointer is over the required column when you click MENU) and, at present, only 
  3598.  column may be so linked: you can
  3599. t link two different validation tables to two columns of the same scrollable list.
  3600. 5.4.1
  3601. Replace on entry
  3602.  feature
  3603. Validation tables, replace on entry feature
  3604. If you select this switch before linking the table a third pair of bump icons becomes active, allowing you to choose which column of the table will replace the data which you type in. In the F.E. college database referred to in 
  3605. the short subject codes (e.g. CHE) would be in the first column and the longer names (e.g. Chemistry) in the second. On typing 
  3606. <Return> 
  3607. Powerbase
  3608.  would replace it with Chemistry. In such cases both the entries in the 
  3609. allowed list
  3610.  proper and those in the replacement list are considered equally valid and either may be entered. You could actually type 
  3611. Chemistry 
  3612. if you wished, instead of just 
  3613. , but the former would obviously take longer to enter and you are far more likely to make a mistake, in which case 
  3614. Powerbase
  3615.  would object. 
  3616. 5.4.2
  3617. When to turn off the 
  3618. Exact match
  3619.  switch
  3620. Validation tables, exact match
  3621. Exact match
  3622.  switch is normally selected to indicate that the only user inputs which will be accepted are those which exactly match an entry on the 
  3623. allowed list
  3624. .  Deselecting the switch allows you to type inputs which are 
  3625. longer
  3626. but not 
  3627. shorter
  3628. than the entries on the 
  3629. allowed list
  3630.  so long as the
  3631.  leftmost part
  3632.  of the input matches such an entry. The unmatched 
  3633.  of your typed entry will be attached to the end of the replacement string. This feature is intended for use with the 
  3634. Replace on entry
  3635.  facility. Suppose your database records numbers of items called Widgets, Doodahs and Thingummies. You decide to identify these names with the codes W, D and T, put the codes in the first column of the table and the names in the second and select 
  3636. Replace on entry
  3637. . You can then type 
  3638.  <Return> and it will be replaced with Widgets. What you might want, however, is to type 
  3639.  and have it replaced with Widgets, 7.  Deselecting 
  3640. Exact match
  3641.  allows you to do just that since the W in W7 matches an entry in the validation list. The 
  3642. expanded
  3643.  entry in the second column is made to read 
  3644. Widgets, 
  3645.  (note the comma and space) and 
  3646. Powerbase 
  3647. tacks the unmatched part of your entry onto the end of this so that 
  3648.  is replaced with Widgets, 7. 
  3649. validation table, displaying
  3650. Displaying 
  3651. validation table
  3652. Placing the mouse pointer over a linked record field and double-clicking with SELECT makes a small window pop up to the right of the field.  This shows all the data which is on the same row of the 
  3653. validation table
  3654.  as the linked item. The item from the 
  3655. allowed list
  3656.  is highlighted in green and the item (if any) to be substituted on entry is shown in red.  This feature is very useful if you are examining a database which uses coded data and you encounter a code which you haven
  3657. t seen before.  
  3658. You can also make this window appear automatically whenever the caret enters a linked field. To turn  the feature on choose 
  3659. Preferences
  3660.  from the iconbar menu and select the 
  3661. Display linked table data
  3662.  switch.
  3663. When linked to a field in the database record the complete table may be displayed by placing the caret in the linked field and clicking on the 
  3664. keypad
  3665.  button 
  3666. List values
  3667. ). Alternatively, any table present in memory, whether linked to a data field or not, may be displayed by selecting it from the 
  3668. Display table
  3669.  submenu (reached from the 
  3670. Validation
  3671. submenu). 
  3672. validation table
  3673.  menu
  3674. Clicking MENU over a displayed table offers a menu with entries as follows:
  3675. Clear 
  3676. removes all data from the table, leaving it blank. Since wiping out a table in this way is pretty drastic you will be asked to confirm the operation before it actually takes place. It is possible to recover the table using 
  3677.  all 
  3678. provided the table has not been closed. When you close a database all the 
  3679. validation table
  3680. s in memory are written to the disc so you will over-write your disc copy with the blank table.  
  3681. Modify
  3682. brings up the same window as you used to create the table. You may then increase the number of rows, add extra columns, alter the order of existing columns or, indeed, do anything sensible. Be careful about renaming columns; combining this with shuffling the columns about is apt to cause confusion: 
  3683. Powerbase
  3684. t a mind-reader! When you have made the required changes click on  
  3685. Modify
  3686. Print 
  3687. outputs the contents of a 
  3688. validation table
  3689.  in the same format as a report. The output appears in a window from which it may be saved as a text file (see 
  3690. 3.1.1
  3691.  <n> 
  3692. will sort the table on the 
  3693. th column, that being the one the mouse pointer was over when you clicked MENU on the table.
  3694.  change 
  3695. will restore the specific item which you were pointing at when you clicked MENU to the state it was in when the table was displayed. You 
  3696. cannot
  3697.  changes if you have closed the table then re-displayed it.
  3698.  all 
  3699. restores the entire table to the state it was in when first displayed, even if 
  3700. Clear
  3701.  has been used. You 
  3702. cannot
  3703.  changes if you have closed the table then re-displayed it.
  3704. leads to a 
  3705. Save box
  3706.  in which the default pathname points to a directory called 
  3707. ValTables
  3708. inside the database application directory. Since that
  3709. s where 
  3710. Powerbase
  3711.  expects to find the tables for a database you should normally accept this pathname by clicking on 
  3712.  or typing Return. Only if you are transferring tables from one database to another should you need to drag the icon to a filer window. 
  3713. validation table
  3714. s in memory are, in any case, saved to the 
  3715. ValTables
  3716. directory when you close the database or quit 
  3717. Powerbase
  3718.  and you can also make this happen at any time by clicking on 
  3719. Force update
  3720.  on the 
  3721. keypad
  3722. Save as CSV 
  3723. leads to a 
  3724. Save box
  3725.  from which the table contents can be saved as a 
  3726. CSV file
  3727. . The default pathname points to the database
  3728. PrintJobs
  3729.  directory.  The file can be loaded into a blank validation table of appropriate format by dropping the file onto the open table (see 
  3730.  for further details). 
  3731. validation table, save as CSV
  3732. Loading validation tables
  3733. A table linked to a field is automatically loaded when the database is opened. If not yet linked, however, the table won
  3734. t be in memory unless you have just created it. To load the table choose 
  3735. Show files
  3736.  from the 
  3737. Validation
  3738. submenu (
  3739. Ctrl Q
  3740. ). The contents of the 
  3741. ValTables
  3742. directory will be displayed and the required tables can dragged onto the 
  3743. record window
  3744.  (or simply double-clicked). As each table is loaded it will be displayed. 
  3745. validation tables, loading unlinked
  3746. unlinked tables, how to load
  3747. There may be times when you wishes to use a 
  3748. validation table
  3749.  to hold some data, but don
  3750. t want to use it to validate input into a field or to link it to a field at all. It is possible to load a 
  3751. validation table
  3752.  once the database is open by using the procedure described in the previous paragraph, but a more convenient solution is to add a 
  3753.  character to the end of the table
  3754. s name (the usual limit of 10 characters applies to the name length).  
  3755. Powerbase
  3756.  will then load it whether any field is linked to it or not. 
  3757. Including 
  3758. validation table data in printouts
  3759. Validation table
  3760. s are often used to allow short codes to be entered in records but with a link to a more descriptive entry in another column of the table.  If this is all that is required then always put the data which makes up the actual 
  3761. allowed list
  3762. , i.e. the items which are allowed in the fields of the main record, into the first column of the table (column 0) and set the link from the record field to this column. The more detailed 
  3763. expanded
  3764.  entry should go in column 1. Printing with the 
  3765. Expand
  3766. switch in the 
  3767. Print options
  3768.  window selected  will then print the column 1 
  3769. instead 
  3770. of the column 0 entry. 
  3771. You can also include data from other columns of a table by displaying the table  and clicking in the required columns with ADJUST, exactly like selecting main record fields for printing (see 
  3772. ). It is immaterial which row you click on; only the column matters and the highlighting to show which columns are selected always appears in the first row. The columns selected in all tables are saved as part of a print Selection file and may therefore be retrieved for future use. As well as highlighting the required columns you will also need to select the 
  3773. Expand
  3774. switch as described above. Printed reports will then include all the data from the highlighted columns. You will need to use this method if you want to print columns 0 
  3775. 1 of a table instead of printing column 1 
  3776. instead
  3777.  of column 0 as described in the previous paragraph.
  3778. Entering validation table data into a record
  3779. There is one more feature of validation tables which might prove useful.  If you place the caret in a database field and then double-click over an entry in an open validation table, the table entry will be copied into the data field, if it will fit. Nothing is copied if the item is too long to fit.
  3780. mmate
  3781. * If you have closed the database  the table won
  3782. t have been reloaded on opening again. See 
  3783.  for how to load your table for linking.
  3784. * This feature cannot be used on tables created with early versions of 
  3785. Powerbase
  3786. and the option will be shaded in such cases. The commonest reason for needing to modify such a table is to increase the number of rows. First export the data as a CSV file then create a new table with the required number of rows and drop the CSV file onto it. 
  3787. Ch 6 
  3788.  Performing Calculations
  3789. There are two mechanisms for performing 
  3790. calculations
  3791. Powerbase
  3792. Self-calculating
  3793.  fields which automatically calculate and display a value derived from other fields. These belong to the field class called Computed (see 
  3794. 4.2.9
  3795. Arithmetic performed on a column in a report. 
  3796. Computed fields may be of Calculated or Composite types. 
  3797. Calculated field
  3798. s display a numeric result derived from other fields in the record. When the mouse pointer is moved over such a field it changes into a shape resembling a pocket calculator. 
  3799. Composite field
  3800. s perform a similar function but display the result as a character string instead of a number. In this case the mouse pointer changes into a large 
  3801.  sign. The latter do not, strictly, involve 
  3802. calculations
  3803.  at all but because Composite and 
  3804. Calculated field
  3805. s work in the same way it is convenient to deal with them together. It isn
  3806. t possible to type data directly into either of these special types of field.
  3807. There are also Computed fields for the same types of data as Stamp fields of types (c), (d), (e), (f), (g) and (h) (see 
  3808. 4.2.10
  3809. ). They have identical names but, whereas Stamp fields are entered when the record is created and don
  3810. t change thereafter, the Computed types update whenever a record is displayed
  3811. It is also possible to write your own functions in Basic and use them in Calculated and 
  3812. Composite field
  3813. s. The system variable TIME$ is useful in this connection. 
  3814. Calculated field
  3815. 6.1.1
  3816. Simple calculations using 
  3817. Numeric field
  3818. Our first example will be to make a field containing a v.a.t. 
  3819. exclusive 
  3820. price determine the contents of another field which includes v.a.t. at 17%.  Let the 
  3821.  of these fields be VEX and VINC respectively. Click MENU over VINC to bring up the 
  3822. Field 
  3823. submenu and choose  
  3824. Calculations
  3825. .  A window appears with a writable icon which contains:
  3826. VINC=
  3827. Complete the formula so that it reads:
  3828. VINC=VEX*1.17
  3829. and click on 
  3830. or type Return. From now on the value in VINC will change whenever you type something in VEX.  Since the v.a.t. rate is liable to change it would be better to place the current percentage rate in another 
  3831. Numeric field
  3832.  called RATE and make the formula attached to VINC read:
  3833. VINC=VEX+(VEX*RATE/100)
  3834. The second example calculates the average of four fields No1, No2, No3 and No4, placing the result in a 
  3835. Calculated field
  3836.  AVGE.  The required formula is:
  3837. AVGE=
  3838. (No1+No2+No3+No4)/4
  3839. You may also enter a tag into a calculation formula by clicking on the required field with Ctrl held down or by choosing it from the pop-up menu of fields available from the calculation window. The tag will be entered in the formula at the caret position. You are strongly recommended to use one or other of these methods since 
  3840. Powerbase
  3841.  finds it very difficult to decide whether or not a formula is valid and errors are usually detected only when the calculation is actually attempted.
  3842. 6.1.2
  3843. Making 
  3844. calculations retrospective
  3845. The default setting is such that entering or altering a formula affects only those records added or altered after the formula entry/change. The changes can be made retrospective by selecting the 
  3846. Recalculate existing records
  3847.  switch on the formula entry window. On clicking 
  3848. you will be asked to confirm that you want previous records to be made consistent with the formula you have just entered. Changes affect the current subfile only, but can be easily implemented in other 
  3849. subfiles
  3850.  by changing to the required subfile, calling up the formula entry window, selecting the option button and clicking 
  3851. The Preferences window, accessible from the iconbar menu, contains a switch labelled 
  3852. Recalculate on opening
  3853. . If this is selected then calculations involving the system variable TIME$ will be updated automatically for all records when the database is opened (see also 
  3854. ).  This could be needed where calculations involve dates, ages, times etc. which might change from one work session to the next even though no editing of the data has been done.
  3855. 6.1.3
  3856. Calculations using 
  3857. numeric
  3858.  field
  3859. s (!)
  3860. This isn
  3861. t as daft as it looks! You might think that the process described in 
  3862. 6.1.1 
  3863. is only applicable to 
  3864. numeric field
  3865. s, but a non-
  3866. numeric field
  3867.  may be specified in the formula 
  3868. it is linked to a 
  3869. validation table
  3870. . To be of use there must be  numeric data in the column of the 
  3871. validation table
  3872. immediately following
  3873.  the one to which the field is linked (see 
  3874. ). Suppose, for example, we have fields in a student record for A-level exam grades, the field 
  3875.  being GR1, GR2, GR3, GR4. The grades are non-numeric but they map onto the numeric points system which universities use to control entry. The relationship of grades to points is as shown at left. A 
  3876. validation table
  3877.  could be set up with the grades in column 0 and the equivalent points in column 1. Each of fields GR1
  3878. GR4 would be linked to column 0 thus restricting input to the capital letters A-E. A further field of Calculated type would be created to hold the points score. If we associate this field (PTS) with the formula:
  3879. PTS=GR1+GR2+GR3+GR4 
  3880. entering or changing the letter grades in GR1-GR4 will cause the correct points score to appear in PTS.
  3881. 6.1.4
  3882. Calculations involving times
  3883. There is a field type Time which will only accept valid 24-hour times in hh:mm:ss format.  If the tag of such a field is included in a calculation formula it will be converted into seconds and the result used in the calculation. Thus a 
  3884. Calculated field
  3885.  DIFF could use two 
  3886. Time field
  3887. s, TIM1 and TIM2, in the formula:
  3888. DIFF=TIM1-TIM2
  3889. Powerbase
  3890.  would keep DIFF updated to show the difference in seconds between the two times.  Three times could be averaged and the result (in seconds) placed in a field AVGE using the formula:
  3891. AVGE=(TIM1+TIM2+TIM3)/3
  3892. 6.1.5
  3893. Calculations involving dates
  3894. You may also include date fields in a calculation in a similar manner to the use of Time fields (see 
  3895. 6.1.4
  3896. ). A Calculated field DIFF could be used to show the number of days between two dates using the formula:
  3897. DIFF=DAT1-DAT2
  3898. Composite field
  3899. To enter the formula for a 
  3900. Composite field
  3901.  follow the same procedure as for a 
  3902. Calculated field
  3903. . Note that the relevant entry on the 
  3904. Field
  3905.  submenu now says 
  3906. Combine fields
  3907. . Formula entry is similar to that for 
  3908. Calculated field
  3909. s. The result of the 
  3910. calculation
  3911.  is a character string and is usually result of string operations. One of the most frequently used will be 
  3912.  which allows fields to be joined together.  Suppose your database contains fields for surname (SNAM) and forename (FNAM) and you want to be able to print names in the format forename-surname. Define a 
  3913. Composite field
  3914.  called NAME and attach to it the formula:
  3915. NAME=FNAM+
  3916. +SNAM
  3917. Note the quoted space separating the names.  You might want the NAME field to show only an initial plus the surname. This could be extracted using the Basic function LEFT$ * to produce the formula:
  3918. NAME=LEFT$(FNAM,1)+
  3919. +SNAM
  3920. Composite field
  3921. s may be used in conjunction with 
  3922. Time field
  3923. s to perform genuine 
  3924. clock arithmetic
  3925. , e.g. referring to the examples in 
  3926. 6.1.4
  3927. , if we attached the formulae to 
  3928. Composite fields
  3929.  instead of Calculated fields they would display the difference and average respectively in hh:mm:ss format instead of in seconds. 
  3930. As with 
  3931. Calculated field
  3932. s updating occurs after editing a field whose tag appears in the attached formula. Thus NAME would be updated after changes to FNAM or SNAM and DIFF after changes to TIM1 or TIM2. You can, however, have 
  3933. Composite field
  3934. s which make use of the Basic system variable TIME$. Thus a field DAY could be linked to the formula:
  3935. DAY=LEFT$(TIME$,3)
  3936. to make it show today as Mon, Tue etc. No field 
  3937.  are referred to in the formula so DAY gets updated immediately before displaying the record so that the information is correct at that time. 
  3938. User functions
  3939. These are functions, written in Basic, which accept field 
  3940.  as parameters and can be included in the 
  3941. calculation formulae
  3942. self-calculating
  3943.  fields. All such functions must return only their principal value: RETURN variables in the parameter list aren
  3944. t allowed. The name of each function must begin with an upper-case 
  3945. , e.g. FNUaverage. This avoids duplication of function-names which occur in 
  3946. Powerbase
  3947. All the user functions to be used by a database must be included in a Basic program called 
  3948. UserFuncs
  3949. which is stored in the database directory (not in the 
  3950. Powerbase
  3951.  directory). When the database is opened 
  3952. UserFuncs
  3953.  will be loaded as a library and 
  3954. Powerbase
  3955.  can call the user functions just as readily as its own functions. When a user function appears in a calculation formula the tags of any fields on which the function operates are included as parameters to the function. Editing any such field makes the 
  3956. Computed field
  3957.  update.
  3958. The distribution disc includes a 
  3959. UserFuncs
  3960.  file containing two examples of user functions kindly submitted by David Lenthall. Users are invited to submit other user functions for possible inclusion in the function library. FNUnow operates on the value of TIME$ from the real-time clock and returns a string containing the current date in form DD-MM-YY. A record design could include a field of Composite type, at least eight characters long and tagged as, for example, DATE. Associating the field with the following formula would cause the field to display the current date at all times:
  3961. DATE=FNUnow(TIME$) 
  3962. If the function always operates on TIME$ and never on any other string, why do we bother including TIME$ as a parameter to the function?  A Calculated or Composite field is normally only updated when you edit a field on which its value depends.  The field DATE in the above example doesn
  3963. t depend on any other fields and would therefore never be updated!  The inclusion of TIME$ causes the Composite field to be updated immediately before the record is displayed.  The same trick of using TIME$ as a parameter, even if the function makes no use of it at all, can be used for any user function associated with a field which you want updating without having to edit the record, but note that updating will only occur if you call up the record for display. See 
  3964. 14.4.3
  3965.  for how to make 
  3966. records in the current subfile update on opening the database.
  3967. The second function, FNUageinyrs accepts two parameters, each of which should a date in DD-MM-YY format, and returns the difference between the dates to the nearest year. The first date should be the earlier of the two. If your record design has a field for Date of Birth (let
  3968. s call its tag DOB) you can use this function together with FNUnow (which returns today
  3969. s date in the required format) to make a 
  3970. Composite field
  3971.  (AGE) display a person
  3972. s age in years by using the formula: 
  3973. AGE=FNUageinyrs(DOB,FNUnow(TIME$))
  3974. Considerable care is needed in constructing user functions as it is very easy to make 
  3975. Powerbase
  3976.  generate errors. In particular you must avoid giving a function a name which is the same as a field tag 
  3977.  or even one which contains a field tag as a substring. The two functions described could not, for instance, be used in a database which had a field tagged as 
  3978. , although 
  3979.  and 
  3980.  could be used.  To avoid this problem users are recommended to form the habit of giving tags names in upper case and user functions names in lower case (apart from the 
  3981. , of course).
  3982. Calculations on a column of a report
  3983. There is an option on the 
  3984. Print 
  3985. submenu called 
  3986. Numeric field
  3987.  which is normally shaded. It only becomes available when you highlight one or more Numeric or 
  3988. Calculated field
  3989. s for printing. You can then access a window listing all the fields (if any) in the record which are of these two types. Associated with each field are six 
  3990. check-box
  3991. es which can be selected to  include the following in the report: 
  3992. column calculations
  3993. Count (number of values in column)
  3994. arithmetic on report columns
  3995. Average
  3996. Standard deviation
  3997. Maximum value in column
  3998. Minimum value in column  
  3999.           
  4000. check-box
  4001. es are shaded until a field is included in a print selection. They then become 
  4002.  and any or all of them may be chosen by clicking with SELECT. The information requested is then added to the report 
  4003. footer
  4004.  when printing takes place. 
  4005. ns on a
  4006. * LEFT$(string$,n) extracts the leftmost n characters from string$.  RIGHT$(string$,n) extracts the rightmost n characters.  MID$(string$,n,m) extracts m characters starting at the n
  4007. th character from the left.
  4008. Grade  
  4009.  Points 
  4010. 10   
  4011.  8    
  4012.  6    
  4013.  4     
  4014. Ch 7 
  4015.  Using extra indices 
  4016. The record data is stored in a file called 
  4017. Database 
  4018. inside the database
  4019. s application directory. The order of records within 
  4020. Database 
  4021. is determined by the order in which the records are entered. To access the records in a logical order we need one or more 
  4022. indices
  4023. Powerbase
  4024.  does have 
  4025. sorting 
  4026. facilities for sorting reports and  
  4027. validation table
  4028. s, but data ordering is achieved mainly by the use of 
  4029. indices
  4030. The most important 
  4031. index
  4032. index
  4033.  0. This is always called 
  4034. PrimaryKey
  4035.  and is created as part of the process of setting up a database (see 
  4036. ). You will find the file 
  4037. PrimaryKey
  4038. inside the database directory. Other, 
  4039. subsidiary
  4040. indices
  4041.  are stored in the database
  4042. Indices
  4043. directory and all have a large
  4044.  on their icon. When a database is opened any 
  4045. indices
  4046.  in this directory will be loaded automatically. (
  4047. Indices
  4048.  operate in memory 
  4049.  to achieve maximum speed 
  4050.  not from disc.) Changes to the database update the 
  4051. indices
  4052.  and closing the database (or quitting 
  4053. Powerbase
  4054.  itself) causes the updated 
  4055. indices
  4056.  to be written back to the disc. 
  4057. Note that the more 
  4058. indices
  4059.  you use the longer it takes to add and delete records or to make alterations to records which involve changing 
  4060. indices
  4061. . The ideal situation might seem to be to have 
  4062. fields 
  4063. index
  4064. ed and, given a fast enough machine, a hard disc and a record structure with not very many fields, this might be feasible. Remember that fields which are repetitive (those which have only a few distinct values repeated throughout many records) do not 
  4065. index
  4066.  efficiently. 
  4067. subsidiary indices
  4068. Subsidiary indices can speed up report printing in some cases (see 
  4069. ).  When you enter a query 
  4070. Powerbase
  4071.  will see if a subsidiary index can be used with advantage and, if so, will go ahead and use it.  To indicate that this is happening the number of the subsidiary index will appear in the small rectangle at the the top right of the query panel. For the speed-up to work the case button on the query panel must match the case-dependence of the index. This is a point easily overlooked!
  4072. Indexing a field
  4073. Click MENU over the required field and choose 
  4074. Create
  4075. Index
  4076.  (Ctrl J
  4077. ) from the 
  4078. Field 
  4079. submenu. The 
  4080. Key structure
  4081.  window will appear with the tag of the field you clicked on in the first of the four 
  4082. Field
  4083.  icons. You may use the bump icons or pop-up menus to bring the 
  4084.  of the other fields into view if you wish to base the 
  4085. index
  4086.  on more than one field. Enter the data in exactly the same way as when creating the 
  4087. primary key
  4088. index
  4089.  (see 
  4090. ) and click on 
  4091. Create
  4092. . If the field is already 
  4093. index
  4094. ed you will be warned of this and asked if you wish to overwrite the existing 
  4095. index
  4096. . When 
  4097. index
  4098. ing is complete you will see that the 
  4099. descriptor
  4100.  of the 
  4101. index
  4102. ed field has changed from black to dark blue. 
  4103. If you click the 
  4104.  buttons on the 
  4105. keypad
  4106. Shift F4
  4107.  and 
  4108. Shift F5
  4109. ) the red highlighting of the descriptor which indicates the current key moves from one 
  4110. index
  4111. ed field to another. When you have a 
  4112. subsidiary key
  4113.  selected as the current key it works just like the 
  4114. primary key
  4115.  as regards browsing, 
  4116. searching
  4117.  and printing. 
  4118. There is nothing to stop you 
  4119. index
  4120. ing one field whilst a subsidiary 
  4121. index
  4122.  based on another field is the currently-active one, thus producing what amounts to a sort within a sort. 
  4123. null keys in subsidiary indices 
  4124. One button which was shaded when creating the primary key is the option switch 
  4125. Omit null keys
  4126. . Although null primary keys aren
  4127. t allowed null subsidiary keys are and the default setting for this switch is therefore OFF.  The field being indexed might in some cases be null most of the time and you want to index only the records in which it isn
  4128. t.  If so, select the switch before clicking 
  4129. Create.  
  4130. Index
  4131.  entry on the main menu leads to a submenu offering three choices.  
  4132. Show details
  4133. Ctrl K
  4134. ) displays the structure of the currently active key.  
  4135. Show files
  4136. Ctrl I
  4137. ) opens the 
  4138. Indices
  4139.  directory. 
  4140. Delete
  4141.  allows you to remove an index (after confirmation).  The index file isn't actually deleted from 
  4142. Indices
  4143.  but simply renamed so that it has the prefix 
  4144. .  Such an index is no longer active and will not be loaded when the database is opened. You can, however, restore it by removing the prefix but it is only useful to do so if no records have been added to or removed from the database in the meantime.
  4145. Automatic saving of 
  4146. indices
  4147. Indices
  4148.  are written to disc when you close a database or quit 
  4149. Powerbase
  4150.  but, as long as the database remains open, they are in memory and therefore could be lost if the power fails or the computer is switched off.  Occasional use of the 
  4151. keypad
  4152. Force update
  4153.  button
  4154.  ensures that the disc copy of all 
  4155. indices
  4156.  is more or less up-to-date but you can automate the process if you wish. Choose 
  4157. Preferences
  4158.  from the iconbar menu, make the appropriate selection from the 
  4159. Save 
  4160. indices
  4161.  section of the 
  4162. Preferences
  4163.  window and click on 
  4164. Accept
  4165. . You may make 
  4166. Powerbase 
  4167. save the 
  4168. indices
  4169.  at regular intervals or simply warn you to do so.
  4170. Ch 8 
  4171.  Using CSV files
  4172. What are 
  4173. CSV files
  4174. CSV stands for 
  4175. comma-separated values
  4176.  and is the name given to files consisting of lines of data, each of which contains individual data items separated from each other by commas. Such files are widely used to mail-merge using a wordprocessor (see 
  4177. ) and also to transfer data from one application to another, e.g. from a database to a spreadsheet or from a RISC OS database to a PC database. We will refer to each line in a CSV file as a 
  4178. record
  4179.  and each item of data in such a line as a 
  4180. field 
  4181. since records and fields are the source and destination of such data when it is exported from or imported into a 
  4182. Powerbase 
  4183. database. 
  4184. The following points should be noted: 
  4185. CSV files, description of
  4186. Fields which are non-numeric (e.g. plain text items such as names and addresses) are often enclosed in double quotes (
  4187. ) whereas numeric data is not. This makes it possible for an application reading a CSV file to distinguish between numbers and strings (which might of course contain numerals) and also allows a comma to be used as a character within a string without being mistaken for a data separator. (Addresses often contain commas e.g. 112, Keighley Road).  For many purposes the quotes aren
  4188. t necessary and may be omitted.
  4189. Null fields are usually included and can be located by looking for two commas with either nothing in between them or with only two double quotation marks between them, i.e. ,, or ,
  4190. ,. Each record in such a file will always contain the same number of fields. 
  4191. Powerbase
  4192.  does, however, allow nulls to be omitted entirely when creating a file in which case the number of fields per record will vary. 
  4193. quotation marks in CSV files
  4194. The way in which each record is terminated varies from one system to another. The last field in a record is followed not by a comma but by a line terminator. On RISC OS systems this is the same as in ordinary text files: the 
  4195. linefeed 
  4196. character (LF, ASCII value 10) and on PCs it is usually the 
  4197. carriage-return
  4198.  character (CR, ASCII value 13). You might, however, encounter 
  4199. CSV files
  4200.  in which 
  4201. both 
  4202. these characters are used, i.e. LF CR or CR LF. 
  4203. Powerbase 
  4204. lets you define any character or pair of characters as the record 
  4205. terminator
  4206. Separators 
  4207. other than commas are sometimes used. The Tab character (ASCII value 9) is often used and such files are called 
  4208. tab-separated values
  4209. files
  4210. Powerbase
  4211.  lets you define any character, or even a pair of characters, as the field separator. All such files created by 
  4212. Powerbase
  4213.  will be of type &dfe and display the CSV file icon (although the default filenames offered do differ: 
  4214. CSVfile
  4215.  where the separator really is a comma, 
  4216. TSVfile
  4217.  where it
  4218. s a TAB and 
  4219. ?SVfile
  4220.  otherwise). 
  4221. In what follows we will, for convenience, refer to them all as 
  4222. CSV files
  4223.  whether or not the separator is a comma.
  4224. Some applications which accept a CSV file as input expect the first line to contain the names of the fields which comprise the subsequent records, e.g. if each record consists of a name and a four-part address this header record might read:
  4225. CSV header record
  4226. CSV line terminator
  4227. STREET
  4228. COUNTY
  4229. POSTCODE
  4230. Powerbase
  4231.  can both export and import files with such a header.
  4232. Setting the 
  4233. CSV options
  4234. Choosing 
  4235. CSV files => 
  4236. Options
  4237.  from the main menu displays the CSV options window which lets you specify all the file characteristics described earlier.  Pop-up menus give you a choice of field-separators and record-terminators with space to enter your own if you wish.  The first three option switches cause an exported file to have, respectively, the following characteristics when the switch is selected: 
  4238. CSV field separator
  4239. quotes round non-numeric fields 
  4240.  see (1) above
  4241. a header record specifying the field names as either tags or descriptors 
  4242.  see (5) above
  4243. null fields included 
  4244.  see (2) above
  4245. Note that the field names referred to in a header record are, by default, the 
  4246. of the corresponding 
  4247. Powerbase
  4248.  fields, but may be changed to the 
  4249. descriptors
  4250. by altering the setting in the 
  4251. Print options
  4252.  window.
  4253. Exporting data as a CSV file
  4254. Having set up your options as described above, creating a CSV file is very like printing a list. First highlight the fields to be exported by clicking on each with ADJUST. Remember that the order in which the fields are highlighted is important. Next choose 
  4255. CSV files =>
  4256. Export
  4257.  (Ctrl X)
  4258. . A window featuring the 
  4259. Query panel 
  4260. appears. Type in a 
  4261. search formula
  4262.  to determine which records are exported. Finally, enter the name of the file and drag the file icon to a filer window. By default the file is saved in 
  4263. PrintJobs
  4264.  as usual, and you may simply click on the 
  4265. Export
  4266.  button or type Return. Experiment with saving 
  4267. CSV files
  4268.  with different settings of the 
  4269. CSV options
  4270.  and then loading the resulting files into 
  4271. Edit 
  4272. to examine them.  If you select the 
  4273. Reverse
  4274.  switch on the Query panel the CSV file will be created in reverse order. (See also 
  4275. 3.5.1
  4276. field-concatenation
  4277.  option (
  4278. see 3.2.2
  4279. ) applies.  This means that data which occupies separate fields in the 
  4280. Powerbase
  4281.  record need not do so in the exported CSV file.  By holding down Shift when selecting the field with ADJUST, the comma (or other separator) which would normally follow is suppressed until you select a field 
  4282. without 
  4283. using Shift.  A slightly problematic situation occurs when you concatenate a mixture of numeric and non-numeric fields with the 
  4284. In quotes
  4285.  option selected.  In such a case 
  4286. Powerbase
  4287.  will enclose the whole concatenated group within two sets of double quotes. e.g. NAME, Z, M and SYM from the 
  4288. Elements 
  4289. database would be exported, for actinium, as:
  4290. ACTINIUM 89 227 Ac
  4291. Spacer
  4292. see 3.10
  4293.  in the above instance it is the default setting of one space 
  4294.  is used to separate the concatenated fields.
  4295. 8.3.1
  4296. Scrollable lists and CSV files
  4297. Scrollable fields may appear in a CSV file in two different ways, depending on how their printing option is set in the Print Options window. If 
  4298. As single row
  4299.  is selected the whole list is exported as a single CSV field. The data corresponding to individual rows of the list are separated by semicolons. If 
  4300. As columns
  4301.  is selected then 
  4302. each row
  4303.  of the list is exported as a CSV field.
  4304. Transferring data from and to scrollable lists in 
  4305. individual
  4306.  records was covered in 
  4307. 2.6.4
  4308. Using 
  4309. CSV files
  4310. import data
  4311. If you drop a CSV file on the record window of an open database the CSV options window (see 
  4312. ) appears with the title changed to 
  4313. Import CSV file
  4314.  and some additional icons, one of which displays the pathname of the file.  Clicking on 
  4315. Import 
  4316. will make 
  4317. Powerbase
  4318.  try to create new database records from the file. If you decide not to do this you should click on 
  4319. Cancel
  4320. . If you do wish to import the data there are some important consideration which will now be explained.
  4321. 8.4.1
  4322. Ensuring that the correct options are selected
  4323. If the CSV file originally came from a 
  4324. Powerbase 
  4325. application the settings in the 
  4326. CSV options
  4327.  window need to be exactly the same as they were when the file was exported. The exception to this is the 
  4328. In quotes 
  4329. button which is shaded on import because 
  4330. Powerbase 
  4331. doesn
  4332. t need it. If the CSV file came from a PC or another RISC OS application you might have to load it into 
  4333. Edit 
  4334. to find out what 
  4335. separator 
  4336. terminator 
  4337. are used.  You will also probably need to set the filetype to &dfe (omit the 
  4338. ) as well. 
  4339. CSV options, importance of
  4340. There are three more option switches at the bottom of the window. One causes each record to be displayed as it is imported. The import process is slower with this turned on but much more informative if you like to know how things are progressing. The second switch, when selected, strips any trailing spaces in the imported data-fields. Some database programs pad all fields to their maximum length by adding spaces to the end of the data where necessary.  If you import such a file into 
  4341. Powerbase 
  4342. you will find that the caret will always be at the far right of the field even though visible characters do not fill the field, and some queries won
  4343. t work properly. Setting the 
  4344. Strip spaces
  4345.  switch before importing the file overcomes the problem.  The third option switch determines how Sequence number fields are handled.  If the switch is ON imported sequence numbers are ignored and new ones assigned in accordance with the field
  4346. s sequence number counter.  With the switch OFF sequence numbers from the CSV file are imported without alteration.
  4347. 8.4.2
  4348. Directing imported data to the correct fields
  4349. If no fields on the 
  4350. record 
  4351. window are highlighted (i.e. with ADJUST) and the CSV file does not contain a 
  4352. header record
  4353.  (see 
  4354. ) then the import process proceeds according to the following rules:
  4355. The first CSV field will be read into the first 
  4356. Powerbase 
  4357. field for which importing is allowed, This means any which can hold text (including External fields) or numbers and also check-boxes Graphics fields, Buttons or fields which are merely labels will be ignored. The next CSV field will be read into the second 
  4358. Powerbase 
  4359. field and so on. 
  4360. If the end of the CSV record is reached before all the relevant fields have been filled (
  4361. data underflow
  4362. ) then the next CSV record will start a new 
  4363. Powerbase 
  4364. record, i.e. the reading won
  4365. t get out of step. It does not matter, therefore, if the CSV file omits null items 
  4366. at the end of a line
  4367. If all relevant fields are filled before reaching the end of the CSV record (
  4368. data overflow
  4369. Powerbase 
  4370. ignores the remainder of the line and skips to the beginning of the next CSV record before starting a new 
  4371. Powerbase 
  4372. record. This is also to keep the operation in step. 
  4373. There will be occasions when you don
  4374. t want to fill the 
  4375. Powerbase
  4376.  fields sequentially as just described. There are two ways of making the process more specific: 
  4377. Highlight the required 
  4378. Powerbase 
  4379. fields with ADJUST before starting the import.  Data will then be read only into the highlighted fields, all other fields being ignored. The order in which the fields are filled is the order in which you highlighted them.  The rules given above about underflow and overflow of data still apply.
  4380. Give the file a header record containing the 
  4381. descriptors
  4382.  of required fields in the 
  4383. Powerbase 
  4384. record.  There is nothing to prevent you using 
  4385. Edit 
  4386.  to add such a header to a CSV file which did not originate from a 
  4387. Powerbase 
  4388. application. The format of the header is illustrated in 
  4389.  (5).  Importing then occurs just as if those fields were highlighted. The 
  4390. Print options
  4391.  window must reflect whether the 
  4392. descriptors
  4393.  of fields are used. 
  4394. Do not use both a 
  4395. header
  4396. highlighting.
  4397. 8.4.3
  4398. Importing data from plain text files
  4399. It was explained in 
  4400.  (4) that files created as described above (
  4401. can have separators other than a comma. If the file has been created using 
  4402. Powerbase
  4403.  CSV exporting facility it will have been given the file-type &dfe as if it was a true CSV file. If it comes from some other source it is likely to be of type &fff (Text). It can still be imported but caution is needed because there are other circumstances in which a text file might be dropped on the 
  4404. record window
  4405. . A properly-written 
  4406. script
  4407.  file (see 
  4408. Ch 12
  4409. ) would be recognised as such and therefore cause no problem, but any text file dropped onto the appropriate type of 
  4410. External field
  4411.  (i.e. a Text or 
  4412. Text Block
  4413.  field) would become linked to that field instead of being treated like a CSV file. If you are importing data from a plain text file and your record contains fields of the aforementioned types be sure to drop the file on the window background, not on the 
  4414. External field
  4415.  The appropriate window will then appear with the title 
  4416. Import text file
  4417. You are strongly advised to use proper 
  4418. CSV files
  4419.  if at all possible.  You could, in fact, use the filer to set the filetype of such non-standard files to &dfe (omit the 
  4420. ) so that the problem of 
  4421. Powerbase
  4422.  taking the wrong action doesn
  4423. t arise.  Be sure to use 
  4424. Options
  4425.  to set the correct field separator and record terminator though. 
  4426. 8.4.4
  4427. What if the imported data won
  4428. t fit?
  4429. There are two situations in which this can happen. The database might not contain enough free records to hold all the imported data and so you get a 
  4430. Database full when reading CSV file
  4431.  error. To avoid this either make sure the database is big enough before you start or place a suitable value in the 
  4432. Increment for expansion
  4433.  icon in the 
  4434. Change length window
  4435. .  The latter is accessible from the 
  4436. Utilities 
  4437. submenu of the iconbar menu (see 
  4438. CSV data, truncation of
  4439. The second situation is where an item is too long for the destined database field. When importing data 
  4440. Powerbase
  4441.  maintains a file called 
  4442. TooBig 
  4443. inside the database
  4444. PrintJobs
  4445. directory. Anything which won
  4446. t fit in the target field is instead written to this file together with information about where it was intended to go and an 
  4447.  character is placed in the database field to draw your attention to it. No writable 
  4448. Powerbase
  4449.  field may be longer than 246 characters and if an item of imported data exceeds this a note will be made in the 
  4450. TooBig 
  4451. file advising you to define an 
  4452. External field
  4453. Text Block
  4454.  or Text) for such data. After completing a CSV import operation it is advisable to look at the 
  4455. TooBig
  4456.  file to see if any remedial action is needed.
  4457. Using CSV files to modify existing records
  4458. Most database programs which support CSV import allow it to be used only for creating new records.  
  4459. Powerbase
  4460.  is unusual in that you can use a CSV file to modify 
  4461. existing 
  4462. records
  4463.   This capability should be used with caution since careless use can irrevocably garble a database.  There are three relevant radio buttons in the CSV options window. They are called 
  4464. Modify existing, With primary key
  4465.  and 
  4466. With rec. number
  4467.  and their actions are as follows:
  4468. Modify existing 
  4469. No new records will be created when a CSV file is dropped onto the record window.  The existing records will be accessed in the order determined by the current index and the new data will be merged into these records.  You should, of course, either use ADJUST to highlight the fields into which the data is to go or place a header in the CSV file specifying the field tags and then turn on the 
  4470. With header
  4471.  switch (see 
  4472. 8.4.2
  4473. ).  If all the records are modified before the end of the CSV file has been reached a warning message is displayed.  Note that it is the 
  4474. s responsibility
  4475.  to ensure that the data in the CSV file is in the correct order since 
  4476. Powerbase
  4477.  has no way of telling which data is destined for which record and can only proceed sequentially.  As an additional precaution a warning message is displayed when you choose this option.
  4478. With primary key 
  4479. This affects both export and import.  When you 
  4480. export 
  4481. data with this button selected  
  4482. each record of the CSV file includes the 
  4483. primary key
  4484.  of the 
  4485. Powerbase
  4486.  record. (Try creating a 
  4487. CSV file
  4488.  with and without this option set and compare the files using 
  4489. .)  When 
  4490. importing
  4491.  such a file 
  4492. Powerbase
  4493.  will attempt to locate records with the 
  4494. same 
  4495. primary keys
  4496.  as the records in the CSV file. If a matching key is not found a new record will be created to receive the data. If the key does exist then the CSV data goes into the same record, overwriting any data which the target fields already contain.  The option is only useful for transferring data between 
  4497. Powerbase
  4498.  databases which have the same 
  4499. primary key field(s) and structure.  
  4500. t forget that 
  4501. Powerbase
  4502. , by default, allows duplicate primary keys so it is possible for the new data to go into the wrong record.  You would be ill-advised to trust this method of import unless you are sure each primary key is unique.
  4503. With record number 
  4504. This resembles the previous option.
  4505.  It allows data to be exported with the 
  4506. Powerbase 
  4507. record numbers included. Importing into another (or the same) database places the data in records having the same record numbers, again overwriting data which may already be present in the target fields.  This option is only useful for transferring data between 
  4508. Powerbase
  4509.  databases in which corresponding records have identical record numbers.  One use for it might be to export a set of data, load it into an editor and do some extensive searching-and-replacing, then put the modified data back into the original database. 
  4510. Creating a new, working database from a CSV file
  4511. There is an option button in the 
  4512. CSV options
  4513.  window called 
  4514. With field data 
  4515. which only becomes active when the 
  4516. With header 
  4517. button is selected. With the switch selected the 
  4518. header record
  4519.  of a saved CSV file contains not only the field names but also the field lengths and types. Again it is suggested that you create a file and look at it in 
  4520. . Each item in the header begins with a number. This is the field length in characters, i.e. the maximum allowed length in the 
  4521. Powerbase 
  4522. record field. Next comes a 
  4523.  character which
  4524. separates the length from the field name. Another 
  4525.  separates the field name from the concluding number which determines the field type. (The type numbers may be inspected by looking at the ValStrings file in the 
  4526. Powerbase 
  4527. directory.) 
  4528. A file created in this form is 
  4529. meant to be dropped onto the window of an open database. It should be dropped onto the 
  4530. Powerbase
  4531.  icon on the iconbar when no database is open. 
  4532. Powerbase
  4533.  will attempt to convert the 
  4534. file into a functioning database
  4535. . All the fields will be ranged on the left of the 
  4536. record window
  4537. , one beneath another and the 
  4538. primary key
  4539.  will consist of the first four characters of the first field. Don
  4540. t try to create databases containing 
  4541. Check box
  4542. , Button or 
  4543. External field
  4544. s using this method; it
  4545. s only meant for the most basic type of database in which all fields are of the Editable class.
  4546. d len
  4547. Ch 9 
  4548.  Mail-Merging with 
  4549. Impression 
  4550. Ovation
  4551. Although the title refers to 
  4552. Mail-Merg
  4553.  the process to be described is more accurately termed 
  4554. Data-Merg
  4555.  as it is by no means limited to merging names and addresses into letters or labels; any kind of textual data from a 
  4556. Powerbase 
  4557. application can be merged into any kind of document in 
  4558. Impression
  4559. Ovation
  4560. or many other editors and wordprocessors. 
  4561. Mail-merg
  4562. ing with 
  4563. Ovation
  4564. Ovation
  4565. expects data for merging to be supplied as a CSV file. An example file (
  4566. Ovation
  4567. ) is supplied with this version of Powerbase. It was created from the 
  4568. Elements 
  4569. database and is intended to work with the sample 
  4570. Ovation
  4571. document 
  4572. OmergeTest
  4573. . Before attempting to create 
  4574. CSV files
  4575.  of your own you are recommended to read the 
  4576. Powerbase 
  4577. documentation on such files (see 
  4578. ). The process for 
  4579. mail-merg
  4580. ing with 
  4581. Ovation
  4582. is described below. 
  4583. 9.1.1
  4584. Preparing an 
  4585. Ovation
  4586. document for 
  4587. mail-merg
  4588. Ovation
  4589. has a very easy method of specifying where the merged data is to go into the document. Whenever you reach a point where you wish to insert a 
  4590. Powerbase 
  4591. field type 
  4592. Ctrl I
  4593. .  A window headed 
  4594. Merge tag
  4595.  will appear inviting you to enter a number. The number required is the field number in the CSV record (which is 
  4596. necessarily the field number in the 
  4597. Powerbase 
  4598. record). If, for instance, you wish to merge the second field from each line of your CSV file enter 2 and type Return. You will see that 
  4599. [Merge2]
  4600.  has been inserted into the text at the caret. Continue typing, inserting other fields as required. The fields do not need to be in numerical order (you can insert field 2 before you insert field 1) and the same field may be inserted many times. Styles and effects may be applied to the Merge 
  4601. . Load 
  4602. OmergeTest 
  4603. to see how this looks. 
  4604. 9.1.2
  4605. Merging the data from 
  4606. Powerbase
  4607. With 
  4608. OmergeTest 
  4609. loaded, open the main 
  4610. Ovation
  4611. menu, go to the 
  4612. File 
  4613. submenu and choose 
  4614. Print
  4615. . Select the 
  4616. Mail merge
  4617.  option button and drag 
  4618. Ovation
  4619.  to the writable icon to the right of the button. The pathname of the file will appear in the icon. Click on 
  4620. and the document will be printed once for each record in the CSV file, merging new data into the document each time. 
  4621. Ovation
  4622. contains 10 records so if you just want to see the process in action without actually printing 10 sheets of paper set your printer manager to print to a file instead of to the printer itself. 
  4623. If you examine 
  4624. Ovation
  4625. you will see that each field is enclosed in quotes. This is only necessary of the fields contain literal commas (see 
  4626. ). Look at the first record, for example, and note the comma in 
  4627. (Gr.aktis,aktinos; ray or beam)
  4628. . Without the quotes 
  4629. Ovation
  4630. would interpret the comma as a field separator and the merging would get out of step for that record. 
  4631. Mail-merg
  4632. ing with 
  4633. Impression
  4634. The following description applies to 
  4635. Impression
  4636.  Publisher
  4637.  and 
  4638. Impression
  4639.  Style
  4640. . The older 
  4641. Impression
  4642.  is also supported. 
  4643. Powerbase 
  4644. Impression
  4645. are able to communicate directly with each other without the need for a CSV file. This task is performed by a module called 
  4646. Impulse
  4647.  which Computer Concepts have placed in the public domain to encourage its adoption as a standard means of transferring data between RISC OS applications. The 
  4648. Impulse
  4649.  module is included in the 
  4650. !Powerbase.Resources.Modules 
  4651. directory. 
  4652. 9.2.1
  4653. Preparing the 
  4654. Impression
  4655. document 
  4656. Since the merged data is not being supplied from a pre-generated CSV file 
  4657. Impression
  4658. needs to request specifically each 
  4659. Powerbase
  4660.  field that it wants to merge into the document. It is probably best to create the document without worrying about the merged data at first, then insert the necessary commands afterwards.
  4661. Wherever you want data from a 
  4662. Powerbase 
  4663. record to appear in the document proceed as follows:
  4664. Place the caret at the point where the data is to be inserted.
  4665. Click MENU over the frame, go to the 
  4666. Utilities  
  4667. submenu (
  4668. Misc 
  4669. Impression
  4670. ) and choose 
  4671. Merge command
  4672. .  A dialogue box will appear. 
  4673. Type the following:
  4674. :Powerbase GetField NAME 
  4675. This is on the understanding that your 
  4676. Powerbase 
  4677. record contains a field whose tag is NAME and that you want the contents of that field inserting into the 
  4678. Impression
  4679. document at that point. Note the spaces and the initial colon. These are essential. 
  4680. Click on 
  4681. or type Return. You will see 
  4682. <NAME>
  4683.  appear in the text. 
  4684. Repeat for all the other Powerbase fields to be inserted in the document. All take the form:
  4685. :Powerbase GetField <tag>
  4686. and in each case the tag, enclosed in angle brackets, will appear in the text.
  4687.  All the data in a given document must come from the same database. It might be easiest if you open the required database and arrange the desktop so that you can see both the 
  4688. record window
  4689.  and the 
  4690. Impression
  4691. document. Clicking MENU over a field makes its tag appear in the second item of the main 
  4692. Powerbase
  4693.  menu. Copy it 
  4694. exactly 
  4695. into the 
  4696. Merge command 
  4697. window.
  4698. (6) Save the the document! 
  4699. 9.2.2
  4700. Merging the data
  4701. Make sure 
  4702. Impression
  4703. has been 
  4704.  by the filer then open the 
  4705. Powerbase 
  4706. database. 
  4707. Drop the 
  4708. Impression
  4709. document on the 
  4710. record window
  4711. .  The document will be loaded and displayed then 
  4712. Powerbase
  4713. Data Merge window
  4714.  will appear.  (If 
  4715. Impression
  4716. t already running 
  4717. Powerbase 
  4718. will run it for you.)
  4719. Clicking on 
  4720. Merge 
  4721. extracts data from either the first record or, if the 
  4722. Merge from displayed record
  4723.  switch is set, the currently-displayed record, and inserts it in the specified places in the 
  4724. Impression
  4725. document. You can see this happening if the relevant parts of the document are visible. Using the keypad to browse, search or change subfiles or keys now causes the accessed records to be merged into the document instead of being displayed in the record window.  If a filter (see 
  4726. 2.3.3
  4727. ) is active this will also be obeyed.  Each time a record is merged its data overwrites that from the previous record. 
  4728. If your printer is on-line and the printer driver loaded you may print the document with the merged data by clicking on 
  4729. Print
  4730. .  If the 
  4731. Print all 
  4732. switch is selected before 
  4733. Merge 
  4734. is clicked 
  4735. Powerbase
  4736.  will proceed through the database from whichever record you first merged, merging each record in turn (or each matching record if a filter is in use) and printing for each record a copy of the document containing the merged data.
  4737. Note that when the mouse pointer is moved over the 
  4738. Impression
  4739. document with the merged data present
  4740. it changes to a large red and blue cross which means that you cannot edit the document. Clicking SELECT over it has no effect; the caret doesn
  4741. t appear. If you click on 
  4742. Cancel 
  4743. in the Data merge window the merged data is removed from the document and normal editing is restored. If you 
  4744.  want to edit the document with merged data present then click on 
  4745. . Note, however, that if you save the document in this state it will be saved with the specific data you have merged into it rather than with the 
  4746. commands 
  4747. to merge data. 
  4748. Appendix A 
  4749. gives a full description of the 
  4750. Impulse
  4751. commands or 
  4752. methods
  4753.  which 
  4754. Powerbase
  4755.  understands.
  4756. Mail-merg
  4757. ing with other programs
  4758. If you use neither 
  4759. Impression
  4760. Ovation
  4761. you may still be able to use 
  4762. mail-merg
  4763. ing with your wordprocessor, but you will need to read the manual carefully to find out how. It will almost certainly involve a CSV, or similar, file in conjunction with some method of 
  4764. tagging
  4765.  the document (as described above for 
  4766. Impression
  4767. Ovation
  4768. ) to specify where in it the data is to be merged. 
  4769. ck on 
  4770. * This feature does not seem to be supported by 
  4771. Ovation
  4772. prior to version 1.36 and it is to that version that this information applies. There has been no opportunity to carry out tests on 
  4773. OvationPro
  4774. so we cannot guarantee that the above method will work with it. 
  4775. OvationPro
  4776. like 
  4777. Impression
  4778. , supports 
  4779. Impulse
  4780. merging and we hope to have this working in a future release of 
  4781. Powerbase
  4782. * In 
  4783. Impression
  4784. all merge commands appear in the document simply as 
  4785. <Merge>
  4786. , i.e. there is nothing to distinguish one merge command from another. To check what a command actually looks like open the 
  4787. Merge 
  4788. command window again and place the caret immediately before the initial 
  4789. . The text of the command will then appear in the writable icon. 
  4790. Ch 10 
  4791.  Utilities
  4792. All the procedures described in this chapter will be found on the 
  4793. Utilities 
  4794. submenu of the iconbar menu, enabling you to examine and alter the structure of an existing database. Note that, if 
  4795. password
  4796. s have been set, you need to enter the database with the 
  4797. Manager
  4798.  level 
  4799. password
  4800.  to obtain access to this submenu. 
  4801. Changing the 
  4802. Primary Key
  4803. primary key
  4804.  of a database is determined when it is created but is not fixed for all time. The 
  4805. primary key
  4806.  choice
  4807.  displays the same dialogue box as was used for creating the 
  4808. primary key
  4809.  in the first place, but with the addition of two radio buttons, whose function is described below. The present 
  4810. key structure
  4811.  is shown. Simply alter it to what you require and click on 
  4812. Create 
  4813. or type Return.
  4814. The first of the two radio buttons (
  4815. Retain subfile structure
  4816. ) is selected by default, making the records appear in the same 
  4817. subfiles
  4818.  as before. Any subsidiary 
  4819. indices
  4820. , therefore, will still be valid. If you deselect this radio button with ADJUST (i.e. have neither button selected) then all the records will be placed in the currently selected subfile and you will need to rebuild your subsidiary indices.
  4821. Selecting the second button (
  4822. Restore deleted records
  4823. ) also places the records in the current subfile, but has the additional effect of recovering 
  4824. deleted
  4825.  records, i.e. records which are still lurking in the 
  4826. Database 
  4827.  but aren
  4828. t in the 
  4829. primary key
  4830. index
  4831. . You would need to use this option when the 
  4832. primary key
  4833. index
  4834.  is lost or corrupted. If the 
  4835. PrimaryKey
  4836.  file is actually missing both radio buttons are shaded in order to enforce this mode. Note that you cannot recover deleted records if the 
  4837. Blank record on deletion
  4838.  switch is set in the 
  4839. Preferences
  4840.  window: the data has 
  4841. really
  4842.  gone for good in this case.
  4843. Adjusting the record format
  4844. Minor changes can be made without rebuilding the database. Choose 
  4845. Adjust format
  4846.  and the blank record window with the blue grid will be displayed.  Clicking MENU over this  brings up the same menu as you used to create the screen originally, but the 
  4847. Field definition window
  4848.  has some options shaded. Thus you can
  4849. t delete fields, add new ones or alter the 
  4850. data length
  4851. s, but you can re-position fields, change 
  4852. descriptors
  4853.  and 
  4854. , and alter the 
  4855. visible 
  4856. lengths of data fields. You can also change the field type 
  4857. within its class
  4858. , e.g. an Alphanumeric field could be changed to a Numeric one since both belong to the Editable class, or you could change a 2-state Check-box to a 3-state one, but you couldn
  4859. t change either into a Calculated field. When you have finished making the changes choose 
  4860. Quit design 
  4861. from the menu. 
  4862. record format, minor adjustments to
  4863. Changing the record format
  4864. This is more drastic, but it is not always possible to foresee future needs and you may have to introduce a new field or lengthen an existing one. That involves rebuilding the whole database. 
  4865. Powerbase
  4866.  actually builds a completely new database under another name, leaving your original database unchanged in case anything goes wrong, so make sure you have enough disc space available.  Choose 
  4867. New record format
  4868. .  The Reformat database window will appear.  Several options are now available:
  4869. Enter the new database name and drag the database sprite to a filer window. You will then be offered the record layout for editing, as when creating a new database.  Make the required modifications then choose 
  4870. Quit design
  4871.  from the menu. 
  4872. database, reformatting
  4873. If you already have a 
  4874.  file in the new format drop it onto the Reformat window where its name will appear. Enter the new database name and drag the sprite to a filer window.
  4875. Create a new database shell (which must have a different name from the one to be reformatted) and copy your existing 
  4876. Form 
  4877. file into it.  Open this 
  4878. database
  4879. , edit the layout and save the 
  4880.  file.  Open the 
  4881.  database, call up the Reformat window and drop the new one onto it. Its pathname will appear in the window. Finally click on 
  4882. Reformat
  4883. . This was the method used in versions of 
  4884. Powerbase
  4885.  prior to 7.52 and, although it still works with the latest version, it should be regarded as obsolete. 
  4886. database, adding new fields
  4887. new fields, adding to database
  4888. Data from a field in the old database will be copied to a field in the new one with the same tag. The new database must therefore retain the same 
  4889.  as the old for data which is to be common to both. A tag present in the old database but not in the new is assumed to refer to a deleted field and the associated data is not transferred.  A field present in both databases but with a shorter defined length in the new one will have its data truncated if necessary. A tag present in the new database but not in the old is assumed to be a new field and will be left blank. Before proceeding 
  4890. Powerbase
  4891.  will inform you of any likely data loss due to deleted or shortened fields and ask you if you wish to proceed. When the process is complete you will be left with the new database open. Links to validation tables, calculation formulae, and indices are preserved unless a relevant field was omitted from the new record.
  4892. Merging two databases
  4893. Two databases may be merged provided they have identical record structures. With the first database open, select 
  4894. Merge database
  4895.  and drag the second database to the displayed window. The pathnames of both databases can now be seen. The pathname of the open database is duplicated in a writable icon labelled 
  4896. Save as
  4897. . If you accept this default the data from the second database will be merged into the open one. You can, however, change this name and drag the database icon to a directory window. The merged data will then go into a completely new database leaving both source databases as they were. When you click on 
  4898. Merge database
  4899. Powerbase
  4900.  will check that the two record formats are identical and report an error if they aren
  4901. t.  An option switch determines the action taken with regard to Sequence number fields (see 
  4902. 8.4.1
  4903. Two radio buttons are also present, as in the dialogue box for rebuilding the 
  4904. primary key
  4905. , and their functions are essentially the same (see 
  4906. ). Having the first button selected merges records into the same 
  4907. subfiles
  4908.  as those they occupied in the second database. Having neither selected merges records into the current subfile of the first database, regardless of where they are in the second database. Having the second button selected does the same, but also imports records which were 
  4909. deleted
  4910.  in the second database.  
  4911. Changing the 
  4912. Database Length
  4913. The number of available records in a database may be increased or decreased. 
  4914. Change length
  4915.  leads to a window with two writable icons. The first specifies the new database length, the other  determines the number of records by which the database will be lengthened each time it becomes full. If this value is zero no automatic lengthening occurs; a warning is displayed instead.  You will only be allowed to shorten a database if the surplus records have never been used or have been blanked on deletion.  Otherwise you can only get rid of them by exporting all the current records as a subset (see 
  4916. 13.2)
  4917. Inspecting and balancing 
  4918. index
  4919.  trees
  4920. Print 
  4921. index
  4922.  lets you examine the structure of the current 
  4923. index
  4924.  to find out how many 
  4925.  are present in each level. The ideal numbers in a perfectly-
  4926. balance
  4927. index
  4928.  tree are 1, 2, 4, 8, 16, 32, 64, 128 etc. (i.e. powers of 2, beginning with 2
  4929. .) A submenu gives you the option of printing the 
  4930. actual 
  4931. , positioned according to the level they occupy in the tree, or printing only the total number of nodes in each level. 
  4932. The data printed is for all subfiles of the current key, but there is an option to restrict it to the current subfile. There are also two alternatives for the layout of the complete tree. Output is to a screen window from which it may be saved in the same way as any other report. (If you have printed the 
  4933.  themselves then double-clicking with SELECT on any key will call up the associated database record.)
  4934. If the tree is very un
  4935. balance
  4936. d and, especially, if there is an enormous number of levels with only 1 or 2 
  4937.  in each, you are advised to 
  4938. balance
  4939.  it using the 
  4940. Balance
  4941. index
  4942.  choice
  4943. . It is also possible to make 
  4944. Powerbase
  4945. balance
  4946.  the 
  4947. index
  4948.  automatically at regular intervals. To turn on auto-balancing choose 
  4949. Preferences
  4950.  from the iconbar menu.  Select the 
  4951. Balance
  4952.  every <n> records
  4953.  switch, placing your chosen value of 
  4954.  in the writable icon provided, then click on 
  4955. Accept
  4956. Auto-balancing
  4957.  is most likely to be useful when a large number of records are being entered in primary-key order.  This will happen if you are entering data from a lot of forms in alphabetical order of name where name is the 
  4958. primary key
  4959. .  It is also very likely to happen when importing 
  4960. CSV files
  4961.  as these are often ordered according to the data item which becomes the 
  4962. primary key field
  4963.  of the database record.
  4964. Finding 
  4965. duplicate primary keys
  4966. Wherever possible a 
  4967. primary key
  4968.  should be chosen so as to be unique. Where duplication of the 
  4969. primary key
  4970.  might occur the designer of the database can decide either to allow or forbid it (see 
  4971. 11.2.1
  4972. ). If duplicate 
  4973.  are permitted it is sometimes useful to have a list of them. Such a list is created by 
  4974. Find 
  4975. duplicates
  4976.  and may be saved as a text file.
  4977. ecord
  4978. * A poor choice of key, with many duplications of just a few values, inevitably leads to a tree with many levels in which each level is sparsely populated. An attempt to balance the tree under such circumstances may give very little improvement.
  4979. Ch 11 
  4980.  Passwords and related matters
  4981. Levels of protection
  4982. Powerbase
  4983.  provides three levels of 
  4984. password protection
  4985. . None of the sample databases uses 
  4986. password
  4987. s, so you may examine the 
  4988. password
  4989. -setting dialogue box which is accessed by choosing 
  4990. password
  4991.  from the 
  4992. Miscellaneous 
  4993. submenu. If 
  4994. password
  4995. s have been defined then an attempt to open the database leads to a request for a 
  4996. password
  4997. .  This is not readable as you type it in; all the characters are replaced by hyphens. If 
  4998. Powerbase
  4999.  does not recognize the supplied 
  5000. password
  5001.  it beeps and prints an error message in red then prompts for the 
  5002. password
  5003.  to be re-entered. After three failed attempts 
  5004. Powerbase
  5005.  will shut down.
  5006. The lowest 
  5007. password
  5008.  level is 
  5009. . It is intended to let users examine the database but otherwise keep them out of mischief. A user opening a database with the 
  5010. Read 
  5011. password
  5012.  will be allowed to browse, search  and print lists (unless debarred as described in 
  5013. ), but not much else. In fact it will be found impossible to place the caret in a field. The function keys won
  5014. t work, many of the buttons on the 
  5015. keypad
  5016.  will be inactive and some menu items will be shaded. In particular, the whole of the 
  5017. Miscellaneous 
  5018. submenu is unavailable, thus preventing the user from getting at the other 
  5019. password
  5020. password levels
  5021. The next level, 
  5022. Read/write
  5023. , allows more operations. Everything on the 
  5024. keypad
  5025.  is allowed, including altering, creating and deleting records. You may create 
  5026. indices
  5027.  and create and edit 
  5028. validation table
  5029. s. What you cannot do is change 
  5030. password
  5031. s or alter the size and structure of the database by means of options on the iconbar 
  5032. Utilities 
  5033. menu. 
  5034. The top level is 
  5035. Manager
  5036. . At this level you are allowed to set and alter 
  5037. password
  5038. s, as well as use all the iconbar menu options. Passwords may be up to 10 characters long and are case-specific. Note that when you are setting the two lower ones they can be read but the 
  5039. Manager 
  5040. password
  5041.  appears even here as a row of hyphens. Take care not to forget it! If no 
  5042. password
  5043. s at all are set you have full 
  5044. Manager 
  5045. rights so you may ignore the 
  5046. password
  5047.  facility altogether if you are the only user of the database. 
  5048. If you decide to use 
  5049. password
  5050. s you might not wish to use all three levels of protection and don
  5051. t need to do so. You may set a 
  5052. Manager 
  5053. level 
  5054. password
  5055.  only, leaving the other two blank. When you attempt to open the database in such circumstances the 
  5056. password
  5057. -entry window appears because 
  5058. Powerbase
  5059. t read your mind and doesn
  5060. t know whether you
  5061. re the Manager and wish to enter your 
  5062. password
  5063.  or whether you
  5064. re a lower-level user being given limited access without needing a 
  5065. password
  5066. . If the latter you would simply click on 
  5067. Open 
  5068. or type Return, thus entering a null 
  5069. password
  5070. . This would give you 
  5071. Write 
  5072. access. If you set the 
  5073. Manager 
  5074. Read/write 
  5075. password
  5076. s then entering a null 
  5077. password
  5078.  would give 
  5079. Read 
  5080. access. 
  5081. It obviously makes no sense to set a low-level 
  5082. password
  5083.  and leave a higher level one blank! 
  5084. Powerbase
  5085.  prevents you from doing this in the following way. If there is a 
  5086. Read 
  5087. password
  5088.  but no 
  5089. Write 
  5090. password
  5091. Powerbase
  5092.  makes the 
  5093.  and 
  5094. Write 
  5095. passwords
  5096.  the same. Similarly, if there is a 
  5097. Write 
  5098. password
  5099.  and no 
  5100. Manager 
  5101. password
  5102.  these two are made the same. This means that setting only the 
  5103. Read 
  5104. password
  5105.  makes all three identical. You are then admitted to 
  5106. Manager 
  5107. level when you enter this 
  5108. password
  5109.  - otherwise you could never get 
  5110. Manager 
  5111. level access again! The rule is that when two or more 
  5112. password
  5113. s are identical you are always given the higher level access when using that 
  5114. password
  5115. 11.1.1 Individual 
  5116. I.D.s and passwords
  5117. It is possible to assign a user an I.D. and a 
  5118. personal password
  5119. , thus giving the data even greater protection since access to a specific database can be limited to those people who appear on an 
  5120. access-control list
  5121. .  It does not seem appropriate, however, to describe the workings of an 
  5122. access-control list
  5123.  in a manual for general consumption!  Anyone wishing to set up a secure database for use by a limited number of specified users is welcome to write for information to 
  5124. Powerbase
  5125.  Support, explaining their requirements.  
  5126. If a database is protected by an access-control list the Access window which appears when you attempt to open the database will display two writable icons instead of one. The first is for the user
  5127. s I.D., the second is for the 
  5128. password
  5129. . Enter both and click on 
  5130. . A an error in either the I.D. or the 
  5131. password
  5132.  will result in access being denied without informing the user which input contained the error. 
  5133. Options selected from the 
  5134. password
  5135. -setting window 
  5136. As well as the icons for the 
  5137. password
  5138. s you will see eight option switches which may be used to enable or disable certain features of 
  5139. Powerbase
  5140.  so that you can customise your database to some extent. They are placed here so that they may only be altered by someone who has 
  5141. Manager 
  5142. rights as that is the only access level which allows you to open this window. All switches except the last (
  5143. Log changes
  5144. ) are ON by default so that all the named features are enabled. If you deselect any of these switches the feature concerned will cease to operate when you click on 
  5145.  and will remain inoperative every time the database is opened unless you set the switch to re-enable it. 
  5146. keypad, disabling
  5147. function keys, disabling
  5148. main menu, disabling
  5149. iconbar menu, disabling
  5150. The first four switches determine the availability of the 
  5151. keypad
  5152. , the equivalent 
  5153. function keys
  5154. , the main menu and the iconbar menu.  All these features are enabled by default but you may disable some or all of them in order to restrict the actions of other users of the database.  This subject is treated fully in 
  5155. Ch 14
  5156. The fifth switch determines whether or not the exporting of 
  5157. CSV files
  5158.  and 
  5159. subset
  5160.  databases is allowed and the sixth does the same with regard to 
  5161. report printing
  5162. reporting, disabling
  5163. disabling functionality
  5164. 11.2.1 
  5165. Duplicate primary keys
  5166. The seventh switch determines whether the database is allowed to have 
  5167. duplicated primary keys
  5168.  or not. As mentioned elsewhere (see 
  5169. 4.5.2
  5170. ) the 
  5171. primary key
  5172.  should, ideally, be unique for each record. Sometimes the very nature of the data will make it so but, if this is not the case, you can enforce 
  5173. primary key
  5174.  uniqueness by deselecting this switch. Any attempt to enter a record which would have a 
  5175. primary key
  5176.  identical to one which already exists will then result in an error message and the new record will not be placed in the file. 
  5177. If you decide to allow duplicate 
  5178. primary keys
  5179.  (and this is the default, remember) you might still want to be warned that such a key is about to be created and a switch on the 
  5180. Preferences
  5181.  window allows you to enable or disable this feature. You can also make 
  5182. Powerbase
  5183.  print a list of duplicate primary keys (see 
  5184. The above refers only to the 
  5185. primary 
  5186. . Other, 
  5187. subsidiary
  5188.  which are generated when you create an 
  5189. index
  5190.  on some other field (see 
  5191. ) are 
  5192. subject to these restrictions and may be repeated many times. 
  5193. Logging database changes
  5194. Selecting the last option switch (
  5195. Log changes
  5196. ) and clicking on 
  5197.  opens a log inside the database directory.  
  5198. Powerbase
  5199.  will then record when the database is opened and closed and details of changes made to the records. The following changes are logged, details in brackets showing what is recorded in the 
  5200. log file
  5201. creation of a new record 
  5202. (record number & 
  5203. primary key
  5204. )        
  5205. deletion of a record
  5206.                                        (record number & 
  5207. primary key)
  5208. shifting a record to another subfile
  5209. (record no., primary key, old and new
  5210. subfiles
  5211. changing a field in a record
  5212. (record no., primary key, old and new
  5213.  contents)  
  5214. changing a field in a group of records
  5215. (change, subfile and search formula)       
  5216. creating an 
  5217. index
  5218. (name of new 
  5219. index
  5220. )         
  5221. balancing an 
  5222. index
  5223. (name of 
  5224. index
  5225.  concerned)        
  5226. changing the 
  5227. primary key
  5228. (former structure of key)         
  5229. reformatting the database
  5230. (fact only 
  5231.  no details)        
  5232. merging data from another database
  5233. (source of merged records)
  5234. importing 
  5235. CSV-type data
  5236. (source of imported data) 
  5237. As long as the 
  5238. Log changes
  5239.  switch remains selected the 
  5240. log file
  5241.  will be opened whenever the database is opened. The title of the database is recorded and the 
  5242. password
  5243.  level at which entry was achieved. This takes the form of a number with the following meaning: 
  5244. password
  5245.  required, 1 
  5246.  read only,  2 
  5247.  read/write, 3 
  5248.  manager 
  5249. The date and time are also recorded.  When you close the database the date and time are recorded again and the 
  5250. log file
  5251.  closed. 
  5252. The log file is a plain text file and is always called 
  5253. .  Although the default location for the file is inside the database directory you may start a log somewhere else by dragging the small text-file icon next to the 
  5254. Log changes
  5255.  switch to a directory display.  When you release the mouse button the password window is closed just as if you
  5256. d clicked 
  5257.  and logging is enabled.  An advantage of this method is that you may perform the same drag to the same directory from many different databases and have them all use the same log.  The 
  5258. !Scrap
  5259.  application is a possible location for a general log of this kind.
  5260. f the
  5261. Ch 12 
  5262.  Script Files
  5263. Powerbase
  5264.  incorporates a 
  5265. script language
  5266.  which lets you control many features from a 
  5267. script
  5268.  file
  5269. . Using 
  5270. script
  5271.  files you can automate jobs which need to be done frequently, print jobs being the most obvious example.  
  5272. Script files
  5273.  are plain text files (created with 
  5274. StrongEd
  5275.  etc.) and are executed by dragging them to the 
  5276. Powerbase
  5277.  record window. All commands in a 
  5278. script
  5279.  file must be in upper-case, preceded by 
  5280. , and may be followed by parameters (which are not case-sensitive), separated from the command by a single space. A complete list of commands follows. Parameters in square brackets are optional. Where commands simply control the status of options switches (e.g. !CASE, !UPPER) the parameter is either ON or OFF.
  5281. !SCRIPT
  5282. Since scripts are just text files there has to be a way for 
  5283. Powerbase
  5284.  to recognise them. All 
  5285. script
  5286.  files must therefore start with a line beginning with !SCRIPT. Prior to v.8 !
  5287. SCRIPT
  5288. POWERBASE 
  5289. was required; you may still add POWERBASE but it is no longer necessary. You may use !
  5290. SCRIPT
  5291.  END as the last line of the file but this is also optional since the script will terminate anyway when the end of the file is reached. You can make the command 
  5292. chain
  5293.  another 
  5294. script
  5295.  file by following it with the name of the new file, i.e. by using the form !
  5296. SCRIPT
  5297.  <filename>. If you just give a leafname 
  5298. Powerbase
  5299.  will look for it in the database
  5300. PrintRes
  5301.  directory. If it is stored anywhere else the full pathname must be supplied. This rule applies to all script commands (e.g. !DELETE, !INCLUDE) which can take a filename as a parameter. 
  5302. When a script file is dropped onto the record window its name will be displayed with a request for confirmation that the file is to be executed. To suppress this action use !SCRIPT QUIET as the first line.
  5303. !COMMENT <string>
  5304. may be
  5305. used to insert comments in a 
  5306. script
  5307.  file. The rest of the line is ignored. 
  5308. !MESSAGE <string>
  5309. will display a user-defined message in a small window to keep the user informed of what
  5310. s happening during execution of a script. !MESSAGE on its own closes the message window.
  5311. !SELECTION
  5312. is used to select fields for inclusion in a report. If a filename is given as a parameter 
  5313. Powerbase 
  5314. looks for a print Selection file of that name and loads it, just as if you had double-clicked on it or dragged it to the record window. (See !SCRIPT, above, for the interpretation of filenames.) Alternatively, you may supply a comma-separated list of the tags of the required fields and may include the record number, key and subfile number by placing RECORD, KEY and SUBFILE, respectively, in the list. If you supply no parameter at all the current selection will be cleared.
  5315. !PRINTOPTS
  5316.  <filename>
  5317. loads a Print options file, setting the options just as if the the file had been double-clicked or dragged
  5318. to the record window.  Without a filename it sets the default options.
  5319. !SUBFILES
  5320.  <n>[,<n1>,<n2>...]
  5321.  selects the subfile(s) which will be searched in order to create a report.
  5322. !CASE
  5323. turns the 
  5324. Case 
  5325. switch on the 
  5326. Query panel
  5327.  ON and OFF. 
  5328. !QUERY
  5329.  [filename\]<
  5330. search formula
  5331. is used to print a report. It returns the same result as entering a 
  5332. search formula
  5333.  in the 
  5334. Match window
  5335.  and clicking 
  5336. Print
  5337. . If you first issue a !DESTINATION FILE command you can use a list of !QUERY commands to create a batch of reports as text files. If you omit the optional filename each file will be created in 
  5338. PrintJobs
  5339.  using the search formula (or part of it) as the filename. If you supply a name containing $ it is assumed to be a full pathname and will be used to create the file. Any other name causes the file to be created in 
  5340. PrintJobs
  5341.  or in a subdirectory (which must exist) of 
  5342. Print Jobs.
  5343.  Note the backslash between the filename and search formula; this tells 
  5344. Powerbase
  5345.  where the one ends and the other begins. !CASE  also affects the behaviour of this command if issued beforehand.
  5346. !SAVE
  5347.  <filename>
  5348.  may be used to save a file which has been created in a window. It is only useful after a 
  5349. !QUERY
  5350.  command for which the destination is Window.
  5351.   [filename\]<search formula>
  5352.  is similar to !QUERY but produces a CSV file instead. The CSV option settings are observed.  A prior !DESTINATION command is unnecessary in this case.
  5353. !INCLUDE
  5354. !EXCLUDE
  5355. !CLEAR
  5356. may conveniently be treated together. They have the same effects as the controls on the Mark pane attached to the bottom of the record window. !INCLUDE <key>[,<key>,<key>...] has exactly the same effect as ticking the check box on the Mark pane for records with the associated primary keys. !EXCLUDE (same syntax) has the same effect as marking with a cross, which is what happens when the alternative option from the pane
  5357. s pop-up menu is chosen. !CLEAR clears all marks. As an alternative to a comma-separated list of keys you may supply a filename. The file should be a plain text file with one primary key on each line. See !SCRIPT for the interpretation of filenames.
  5358. !FORMAT
  5359.  <string>
  5360. where <string> is 
  5361. Horizontal
  5362. Vertical
  5363. , Label or Table sets the print format. If any other parameter is used, or !FORMAT is issued by itself, the 
  5364. Horizontal
  5365.  format is used.
  5366. !DESTINATION
  5367.  <string>
  5368. where <string> is
  5369. Window, File or Printer sets the destination for report printing (see 
  5370. ).  If File is used the report is saved in 
  5371. PrintJobs
  5372.  unless a subsequent !QUERY command supplies an alternative pathname (see above).
  5373. !EXPAND
  5374. selects the the switch which causes fields to be expanded by reference to a linked 
  5375. validation table
  5376. . !EXPAND OFF (or just !EXPAND by itself) deselects the switch.
  5377. !DATE
  5378. turns date and time stamping ON and OFF.
  5379. !UPPER
  5380. forces upper-case printing ON, normal upper/lower case printing otherwise. 
  5381. !HEADER, !FOOTER
  5382. determine whether  
  5383. header/footer
  5384.  information (see 
  5385. ) is printed on reports.
  5386. !FIRST
  5387. when followed by ON causes the 
  5388. header
  5389.  to appear on the first page only. (Footer information only appears on the final page anyway.)
  5390. !SHRINK
  5391. determines whether surplus 
  5392. white space
  5393.  is removed from between the columns of reports in Horizontal format. 
  5394. !HEADINGS
  5395. causes 
  5396. descriptors
  5397.  to be used as field identifiers in a report. !HEADINGS T, or without any parameter, causes 
  5398.  to be used.
  5399. !TITLE
  5400.  <string>
  5401. uses <string> as a title on subsequently printed reports. 
  5402. !PAGE
  5403. sets the page length for reports to 
  5404.  lines. 64 is probably correct for A4 (but see 
  5405. !SPACER
  5406.  <string>
  5407. specifies the string to be used to separate columns of printed data in reports using 
  5408. Horizontal
  5409. Table format (see 
  5410. !TEXTWIDTH
  5411.  specifies the maximum width in characters for Memo and Text block fields in reports.
  5412. !ORIENTATION
  5413. <LANDSCAPE, SIDEWAYS>
  5414. changes the paper orientation for hard-copy printing from the default: !ORIENTATION PORTRAIT or UPRIGHT turns it back again.
  5415. !HEADERFONT
  5416. !BODYFONT
  5417.  <fontname>
  5418.  set the fonts for headers and footers and for body text in hard-copy printing. Names should be of the form Homerton.Medium, Trinity.Bold.Italic etc. The font must, of course, be known to the font-manager.
  5419. !FONTSIZE
  5420.  sets the size, in points, of the fonts used for hard-copy printing.
  5421. !LMARGIN
  5422. !RMARGIN
  5423. !TMARGIN
  5424. !BMARGIN 
  5425.  set the print margins for hard-copy printing. The units default to mm unless specified by appending mm, in or pt to the number.
  5426. !PMARGINS
  5427.  cancels the margin settings in the Printer Setup window and uses the printer driver
  5428. s default margins instead. 
  5429. !LINESPACE
  5430.  sets the spacing between the baseline of one line of printed text and the next as a percentage of the font size. The default is 120%. For Table format 150% looks neater.
  5431. !TABLE
  5432.  <columns>,<width>,<rows>
  5433.  sets up the number and width of blank columns, and the number of blank rows at the end of the report, in Table format. Column width is in mm but may be changed as for margins (see above). You need not specify all the parameters; current values will be used if any are omitted. You may, for example, specify 6 blank rows and nothing else by using !LABEL ,,6. Note the commas.
  5434. !LABEL 
  5435. <n>,<w>,<h>,<str1>,<str2>,<s>,<su>,<bl>,ON/OFF
  5436.  determines the setup for label-printing where: n=number of labels across the page, w and h are the width and height of label (units may be specified as for margins and column widths), str1 and str2 are the optional fixed first and last lines and s=number of label at which printing on first page is to start. su and bl are field tags. If field bl is blank then field su will be printed instead. The final parameter specifies whether the primary key is to be printed on the label. As with !TABLE you need only specify the values you wish to change, but watch those commas!
  5437. !COPIES
  5438. specifies the number of copies to be printed
  5439. !SORT
  5440. specifies a column on which the report is to be sorted before printing. The tag of a field included in the report may be specified instead of a column number. The !SORT must appear before !QUERY in the script file. It cannot be used when the output destination is File.
  5441. !IMPRESSION
  5442. is used in conjunction with !QUERY to generate a report in text-file format, allows you to insert 
  5443. Impression
  5444.  commands at the start of the text-file. A 
  5445. script
  5446.  may, for example, execute a series of !QUERY commands and the resulting files are to be all selected together and dragged into an 
  5447. Impression
  5448. document. To make each file go into a new frame you need to make each begin with {nextframe}. This can be achieved by placing the 
  5449. script
  5450.  command !IMPRESSION {nextframe} before the first !QUERY. You do not, however, want {nextframe} to begin the first file created, or the 
  5451. Impression
  5452. document will have a blank frame on its first page. To suppress the effect on the first file use: 
  5453. !IMPRESSION {nextframe} Not first. 
  5454. There must be a space between the 
  5455.  and the 
  5456. , but the 
  5457. Not first
  5458.  string isn
  5459. t case sensitive.
  5460. !DELETE
  5461.  <key>[,<key>,<key>...]
  5462. deletes record(s) having the supplied primary key(s). As an alternative to the key or key-list you may supply the name of a text-file containing the required keys, one to a line. The filename will be interpreted as described above for !SCRIPT <filename>. The command can delete records in any or all of the six subfiles, not just the current subfile
  5463. !INSERT
  5464. is the counterpart of !DELETE. Useful in similar circumstances. In this case the command must occupy a line by itself and be followed by the record to insert, one field to a line. It is the user
  5465. s responsibility to ensure that the lines are not too long for the database fields into which they are placed and that the number of lines following each !INSERT is the same as the number of fields in the record. Don
  5466. t forget to leave blank lines for empty fields!  Records will be inserted into the currently-selected subfile.
  5467. !MOVE
  5468.  has the same syntax as !DELETE but moves records from their present subfile to the next in sequence, regardless of the currently-displayed subfile; e.g. a record in subfile 2 will be moved to subfile 3.
  5469. !CHANGE
  5470.  <field tag>,<old contents>,<new contents>[,<search formula>]
  5471.  allows global changes to be made. The command functions like the 
  5472. Global changes
  5473.  menu choice (see 
  5474. 2.5.5
  5475. !OBEY
  5476.  <string>
  5477. can be made to do anything which a *command can do. e.g. !OBEY Delete <filename> will delete the named file. !OBEY <filename> will attempt to *Run the file. By supplying the pathname of a 
  5478. Powerbase
  5479.  database you can close the existing database and open a new one.
  5480. !KEY <index name>
  5481. where the specified index name appears on the menu of loaded indexes will make that the currently active index. If no parameter is given the primary key index is selected.
  5482. !INDEX <tag>[,<tag>,<tag>...]
  5483.  constructs an index on the field whose tag is first in the list and makes it the currently active index. If further tags are supplied each is treated in exactly the same way. 
  5484. Using the 
  5485. Elements
  5486.  database, for example, the command !INDEX Z,GP would index first on the Atomic number (Z), then on the Group field (GP) 
  5487. with the Z index active
  5488. . The database is left with GP as the active index and a report of the whole database shows the records ordered by Group but, within each group, the records are in order of Atomic number; a sort within a sort. The whole field (with spaces ignored) is used as the key unless you specify a shorter key by placing a number before the tag, e.g. 5NAME for the leftmost five letters.
  5489. Powerbase
  5490. remembers
  5491.  the names of the indices created by the most recent !INDEX command and will delete them if you issue !INDEX with no parameters.
  5492. !FILTER <search formula>
  5493.  has the same effect as entering a search formula in the Filter window. The Filter window isn
  5494. t opened but the Filter switch on the keypad (or on the record screen if there
  5495. s a Filter switch there) is turned on and the first matching record is displayed. !FILTER on its own cancels the filter.
  5496. !STARTAT <tag>
  5497.  sets the field at which editing begins and places the caret in that field. If no parameter is given, or if the designated field doesn
  5498. t exist or isn
  5499. t writable, editing starts at the first writable field.
  5500. Requesting user input from script files
  5501. This is best illustrated with an example.
  5502.  !FILTER GP=1 will use GP=1 as a search formula. However, !FILTER Search formula? behaves quite differently. A small window pops up saying 
  5503. Search formula?
  5504.  with a writable icon into which you enter the formula then click 
  5505.  or type Return. This applies to all script commands. Instead of putting the parameter itself in the script, supply a prompt 
  5506. followed by a question mark
  5507.  and the parameter and will be requested and used with the command.  Why would you want to do this? You might use a script to print a report in Table format but not always want the same number of blank columns and rows. You can request these with !TABLE Columns?,,Extra rows?,. Note the double comma (column width is not changed) and the comma after 
  5508. Powerbase
  5509.  checks the parameter string for a concluding 
  5510.  which, if found, causes the 
  5511. whole
  5512.  string to be treated as a prompt. This is fine for commands like !TITLE which take only one parameter but those which take multiple parameters need the concluding comma.
  5513. FILTE
  5514. * DDF: Document Description Format; the means by which styles and effects are encoded within an 
  5515. Impression
  5516.  document.
  5517. Ch 13 
  5518.  Subset databases
  5519. Subset
  5520.  databases are fully-working 
  5521. Powerbase
  5522.  databases with exactly the same structure as the main database but containing only a selection of its records.
  5523. Creating a subset
  5524. Creating a 
  5525. subset
  5526.  is extremely simple. Choose 
  5527. Export subset
  5528.  from the main menu and you will see a window strongly resembling the one used to export 
  5529. CSV files
  5530. .  It features our old friend the 
  5531. Query panel
  5532.  into which you type a 
  5533. search formula
  5534.  which determines the records to be exported as a 
  5535. subset
  5536. It is then only necessary to enter a suitable filename and drag the database icon to a filer window. The default pathname creates the new database as 
  5537. Subset
  5538. PrintJobs.
  5539. s probably not where you want it, but it is at least a familiar location from which you can extract the subset database later. You can accept this default by just clicking on 
  5540. Export
  5541.  or typing Return. Records are exported from the currently-selected subfile and will be placed in the corresponding subfile of the subset database.
  5542. On opening the new database you will find that it functions exactly like the original but contains only the selected records. It is made just large enough to contain the selected records so you will need to increase its length (see 
  5543. ) if you intend to add any further records.
  5544. Using a subset to shorten a database
  5545. Database, shortening using subset
  5546. A database which has undergone a lot of deletions might have blank records scattered at random throughout its 
  5547. Database
  5548.  file and unused keys scattered at random throughout its indices.  If a database has 100 available records of which only 50 are in use you might want to get rid of the surplus records but aren
  5549. t able to do so by the simple shortening procedure described in 
  5550. Ch 10.5
  5551.  because that only allows you to lop off the 
  5552.  of the database.  The amount by which the database can be shortened is often much less than the number of in-use records would suggest: in extreme cases you might not be able to shorten it at all by this method.  (Don
  5553. t be afraid to try, however.  
  5554. Powerbase
  5555. t let you butcher your database; it just  tells you you can
  5556. t do it.)
  5557. The solution to the problem is to export 
  5558.  the records as a subset.  Simply follow the instructions in 
  5559.  but don
  5560. t type anything into the query panel.  The resulting subset will contain the 50 in-use records and no extras at all.
  5561. There is a snag, unfortunately.  The 
  5562. Export subset
  5563.  feature operates only on the current subfile.  If your database uses more than one subfile things are a little more difficult.  You could accumulate all the records in subfile 0 (see 
  5564. 2.5.6
  5565. ), export the subset then move the records into the required subfiles.  Or you could export each subfile as a separate subset (the records in the subsets will be in the same subfiles as in the original database) and then merge the resulting subsets into one new database (see 
  5566. Ch 14 
  5567.  Customising Powerbase
  5568. This chapter describes all the things you can do to influence the way 
  5569. Powerbase
  5570.  looks and functions.
  5571. Overall control of the database
  5572. Powerbase 
  5573. database is normally controlled in four ways:
  5574. mouse-clicks on the 
  5575. keypad 
  5576. keypad, disabling
  5577. function keys, disabling
  5578. main menu, disabling
  5579. iconbar menu, disabling
  5580. keystroke
  5581. s which mimic the actions of the 
  5582. keypad
  5583. choices from the 
  5584. main menu
  5585. choices from the 
  5586. iconbar menu
  5587. disabling functionality
  5588. Each of these can be disabled by deselecting one of the option switches on the Password window (see 
  5589. ).  The main reason why you might want to do this is to provide limited facilities to someone else who is using your database.  It doesn
  5590. t, on the face of it, make a lot of sense to disable both the 
  5591. keypad
  5592.  the 
  5593. keystroke
  5594. -equivalents as no browsing or editing would then appear to be possible. You can, however, place some or all of the 
  5595. keypad
  5596.  buttons on the record window itself (see 
  5597. 4.2.8
  5598. ) thus allowing you to choose what functions you want to allow access to.  You might, for example, wish to provide only the 
  5599. Next record
  5600. Previous record
  5601.  and 
  5602. Search
  5603.  buttons.  Define these as 
  5604. Button field
  5605. s at the time the record is being designed then disable the 
  5606. keypad
  5607.  and 
  5608. keystroke
  5609.  equivalents. Other switches in the 
  5610. Password window
  5611.  enable you to stop the user printing reports or exporting data as 
  5612. CSV files
  5613. subset
  5614. Defining the 
  5615. function keys
  5616. Any button on the 
  5617. keypad
  5618.  may have its action duplicated by one of the 
  5619.  F1-F11, with or without the use of Shift or Ctrl. Point at the button to which you wish to assign a key and click MENU to display the 
  5620. keypad
  5621.  menu. 
  5622. Assign
  5623.  leads to a window which shows the present key-assignment, if any. Use the 
  5624.  icons to select the required function key and, if desired, select one of the switches for Shift and Ctrl. Click on the 
  5625. Assign
  5626.  button and you will now find that the assigned key exactly mimics the 
  5627. keypad
  5628.  button 
  5629.  even to the extent of actually 
  5630. pressing
  5631.  the button when you type the key. 
  5632. function keys, assigning
  5633. One important constraint should be noted. Whatever key you assign to the 
  5634. Searc
  5635. h button
  5636. Powerbase
  5637.  will automatically assign the shifted version of this key to the 
  5638. search all subfiles
  5639.  function (see 
  5640. 2.3.1
  5641. ). For this reason you should assign an unshifted key to 
  5642. Find 
  5643. and avoid assigning the shifted version to any other 
  5644. keypad
  5645.  button. Similarly, assigning a key to the 
  5646. Add record
  5647.  button
  5648.  automatically assigns the shifted key to the 
  5649. Copy record
  5650.  function.
  5651. Record, copying
  5652. Records, searching all subfiles for
  5653. You may save your key definitions by choosing 
  5654. Save choices
  5655.  from the 
  5656. keypad
  5657.  menu and you will find them operative next time you use 
  5658. Powerbase
  5659. . Note that your definitions work with 
  5660. the databases you use; there is no facility for saving separate assignments for each database. The default 
  5661. keystroke
  5662. s (together with some which duplicate non-
  5663. keypad
  5664.  actions) are listed in 
  5665. Appendix B
  5666. .  If they have been redefined you may restore the defaults by choosing 
  5667. Defaults
  5668.  from the 
  5669. keypad
  5670.  menu. If you wish to 
  5671.  the redefined 
  5672. keystroke
  5673. s permanently you should restore the defaults as described then 
  5674. Save choices
  5675. List keys
  5676.  on the 
  5677. keypad
  5678.  menu displays all the key definitions (including those for non-
  5679. keypad
  5680.  functions) in a window from which the information may be saved as a text file.
  5681. Function keys
  5682.  may also be used to enter data into record fields or writable icons in dialogue boxes.  The actual programming of the keys is done at the command line which is accessed by pressing f12. This takes you temporarily out of the desktop and gives you a 
  5683.  prompt at the bottom of the screen.  Suppose you want to program f3 to enter the word 
  5684. Powerbase
  5685. .  Type, at the star prompt:
  5686. Key3 Powerbase
  5687. and press Return twice to return to the desktop.  The string assigned to the key may be entered by typing 
  5688. Ctrl Shift F3
  5689. .  Any of the keys 
  5690. F1-F9
  5691.  may be programmed and the string is always entered by typing the key with Ctrl and Shift both held down. 
  5692. function keys, storing strings in
  5693. CSV options
  5694. It was explained in 
  5695.  how to access the 
  5696. CSV options
  5697.  window and what the pop-up menus and option switches are for.  The buttons 
  5698. Save choices
  5699. as default
  5700. in database
  5701. Load default
  5702.  and 
  5703. Cancel
  5704.  work in a similar way to that described above for the 
  5705. Print options
  5706.  window 
  5707.  with one notable difference. No 
  5708. Save box
  5709.  appears when you 
  5710. Save choices in database
  5711. ; the file is saved as a plain text file called 
  5712. CSVoptions
  5713. This more limited behaviour has been chosen because, although you might want several 
  5714. Print options
  5715.  files for different jobs, it is unlikely that you will have a use for several 
  5716. CSV options
  5717.  files.
  5718. Preferences
  5719. Several previous references have been made to the 
  5720. Preferences
  5721.  window which is opened from the iconbar menu. A full de
  5722. script
  5723. ion of the choices offered in this window follows.
  5724. 14.4.1 Separators in date and 
  5725. time field
  5726. Date separator
  5727. Time separator
  5728. By default Date fields have the format dd-mm-yy or dd-mm-yyyy, i.e. they use a hyphen as a separator. Time fields have the form hh:mm:ss, i.e the separator is a colon. These defaults may be changed by entering your preferred separators in the two writable icons in the Separators section at the top of the Preferences window and clicking 
  5729. Accept.
  5730.   Note that when entering dates or times into these field types you may actually type any non-numeric character you wish as a separator. On moving to another field 
  5731. Powerbase
  5732.  will re-format the date or time to use the separator specified in Preferences.
  5733. CSV file, edits saved as
  5734. 14.4.2 Wild-cards
  5735. The use of 
  5736. wild-card characters
  5737.  is described in 
  5738. 2.5.5
  5739.  and 
  5740. 3.5.3
  5741. .  By default 
  5742.  represents a single character and 
  5743.  a group of characters which need not be matched.  You may change either or both 
  5744. wild-card
  5745.  characters if you wish in the same way as described above for date and time separators.
  5746. 14.4.3 Option switches
  5747. Record edits as CSV file
  5748. when ON causes a CSV file called 
  5749. NewData
  5750.  to be created in 
  5751. PrintJobs
  5752. . New and edited records are saved in this file which may then be used to enter data into another database. 
  5753. Launch new copy
  5754. when ON
  5755. causes another copy of 
  5756. Powerbase 
  5757. to be loaded when you double-click on a database, instead of closing the current database. This can be useful if you want to access several databases at once, as one copy of 
  5758. Powerbase 
  5759. only supports the use of a single database. If there is a dormant copy of 
  5760. Powerbase 
  5761. on the iconbar (i.e. one with 
  5762. No data
  5763.  under its icon) then double-clicking a database sends it to that copy rather than launching a new one. With the switch OFF double-clicking on a database closes down an already-open database before opening the new one. Even then you can load multiple copies of 
  5764. Powerbase 
  5765. by double-clicking on 
  5766. Powerbase 
  5767. itself and then open a different database in each by dragging the databases to the icons. 
  5768. Case-sensitive queries
  5769.  You can choose the default state of the corresponding switch on the Query panel by setting this switch as required and saving the Preferences.
  5770. Recalculate on opening
  5771.  affects 
  5772. Computed field
  5773. s (see 
  5774.  and 
  5775. ) whose associated formulae make use of the system variable TIME$ and also those Computed fields which are analogous to Stamp fields (see 
  5776. 4.2.10
  5777. ). With the switch OFF the contents of such fields are recalculated only when a record is displayed. This might not be good enough where, for example, TIME$ is used in a 
  5778. User function
  5779.  (see 
  5780. ) to keep track of people
  5781. s current ages. Selecting the switch causes 
  5782. Powerbase
  5783.  to scan the whole file and update such fields when the database is first opened.
  5784. Blank record on deletion
  5785.  If this switch is OFF then deleting a record from the database merely removes all references to its key(s) from the 
  5786. index
  5787. (es), leaving the actual record data untouched in the 
  5788. Database 
  5789. . Although such 
  5790. deleted
  5791.  records will be overwritten when new records are entered, the situation may be deemed unsatisfactory from a security point of view since the 
  5792. deleted
  5793.  records can be examined by simply loading 
  5794. Database 
  5795. into 
  5796. . If the switch is ON deletion causes the relevant record to be over-written with a blank record.
  5797. Keep 
  5798. descriptor
  5799.  with data 
  5800. alters the behaviour of fields as they are dragged around the screen when designing the record layout.  With the switch OFF you may drag the data field and the 
  5801. descriptor
  5802.  independently of one another. With the switch ON this is true only of the 
  5803. descriptor
  5804. ; if you drag the data field the 
  5805. descriptor
  5806.  jumps to its 
  5807. normal
  5808.  position to the left of the data field as soon as you release the mouse button. 
  5809. Validate input 
  5810. turns data 
  5811. validation
  5812.  (see 
  5813. ) ON and OFF.  If you ever find yourself unable to escape from a field linked to a 
  5814. validation table
  5815.  you can bring up the 
  5816. Preferences
  5817.  window, deselect this switch and try again. 
  5818. Shift-F9
  5819.  also will toggle validation ON and OFF. If the keypad is visible you will see the 
  5820. List values
  5821.  button become shaded when validation is disabled. 
  5822. validation, turning ON/OFF
  5823. Display linked table data 
  5824. Every time the caret enters a field with a link to a 
  5825. validation table
  5826.  a window showing data from the relevant 
  5827. validation table
  5828.  row appears to the right of the field if the switch is ON. This is either useful or infuriating, depending on your point of view. If turned OFF you can still call up the window for a specific field by double-clicking on the field with SELECT (see 
  5829. Warn of external deletion 
  5830. Since deleting data from an 
  5831. External field
  5832.  (see 
  5833. 2.6.3
  5834. ) involves the deletion of an actual file you will probably appreciate being warned when you are about to do it. With this switch ON you will be given a warning and the opportunity to change your mind. 
  5835. External fields, warn of deletion of
  5836. Warn of 
  5837. duplicates
  5838. The creation of records with identical 
  5839. primary keys
  5840.  can be prohibited if so desired (see 
  5841. 11.2.1
  5842. ). Normally, however, they are permitted. You may, if you wish, turn this switch ON to issue a warning that such a record is about to be created. 
  5843. duplicate keys, warning of
  5844. Default action on Return 
  5845. According to the Style Guide for RISC OS typing Return anywhere inside a dialogue box ought to have the same effect as clicking on the default action button (that
  5846. s the one with the yellow channel border) regardless of which writable icon the caret is in. If that
  5847. s what you want then turn this switch ON. Many users (including the author!) 
  5848.  it and prefer the default action to take place only if the caret is in the last writable icon when Return is typed. Hence the default setting, which is OFF.
  5849. Strip leading spaces
  5850. is ON by default.  Spaces at the beginning of data fields will be stripped before the record is written to the file.  Turn the switch OFF if you actually want spaces in this position
  5851. Strip trailing spaces
  5852. should normally be left ON to avoid unwanted spaces at the right of data fields. It is easy to press the space-bar by accident when entering data quickly and you might not notice that a field has one or more spaces between the end of the last word and the caret. 
  5853. Balance
  5854.  every <n> records 
  5855. The need to 
  5856. balance
  5857. indices
  5858.  and the use of this option is explained in 
  5859. Remember 
  5860. place in subfile
  5861. With this switch OFF a change of subfile leads to the display of the first record in the new subfile. If you are doing a lot of hopping back and forth between 
  5862. subfiles
  5863.  to inspect specific records you might want to select the switch. It is then just as if you had bookmarks in separate chapters of a book; when you return to a subfile you have previously visited you will see the same record you were viewing when you left that subfile.
  5864. 14.4.4 Save 
  5865. indices
  5866.  (Default: Manual)
  5867. Indices
  5868.  are 
  5869. always 
  5870. saved whenever you close a database or quit 
  5871. Powerbase
  5872.  and only fear of power cuts or system failure (which includes some kind person switching off your computer!) need make you concerned about saving them yourself. With the 
  5873. Manual
  5874.  setting nothing happens during normal working unless you click 
  5875. Force update
  5876.  on the 
  5877. keypad
  5878. .  Selecting 
  5879. Automatic
  5880. Warn only
  5881.  allows you to type in a suitable time interval (default = 10 min) at which 
  5882. Powerbase 
  5883. will either issue a warning to save your 
  5884. indices
  5885.  (using 
  5886. Force update
  5887. ) or actually save them for you.
  5888. 14.4.5 Start editing at
  5889. Editing, choosing starting field
  5890. When a record is displayed the caret is placed, by default, in the first editable field.  Editing may be made to start at a different field by choosing 
  5891. Start editing
  5892.  from the 
  5893. Field
  5894.  submenu (see 
  5895. 2.5.4
  5896. ) or, alternatively, by placing the caret in the required field and typing 
  5897. Ctrl S
  5898. .  The tag of the relevant field is stored in this writable icon in the 
  5899. Preferences
  5900.  window and can be saved along with the other preferences.
  5901. 14.4.6 Application for 
  5902. Impulse
  5903. data-merg
  5904. As noted elsewhere (
  5905. Powerbase
  5906.  can merge directly into a suitably-formatted 
  5907. Impression
  5908. document by simply dropping the document icon onto the 
  5909. record window
  5910. . The dialogue box which then appears contains a writable icon which shows the application with which 
  5911. Powerbase
  5912.  will merge. This name  is, by default, 
  5913. Impression
  5914. , but may be altered by users for their own purposes. An application which will receive data from 
  5915. Powerbase
  5916.  in this way must make use of the 
  5917. Impulse
  5918. II protocols as defined by Computer Concepts. Even if you are using 
  5919. Style 
  5920. Publisher 
  5921. the name to which these applications respond is still 
  5922. Impression
  5923. 14.4.7 Save choices
  5924. This section of the window works 
  5925. exactly
  5926.  as it does for 
  5927. CSV options
  5928.  (see 
  5929. ) as do the 
  5930. Load default
  5931.  and 
  5932. Cancel
  5933.  buttons.
  5934. Colours of 
  5935. key field
  5936. s and table-
  5937. linked fields
  5938. These may be selected in a window reached by choosing 
  5939. Colours
  5940.  from the 
  5941. Miscellaneous
  5942.  submenu. The following default colours are used: 
  5943. Colours used to identify key fields
  5944. Colour used to identify linked fields
  5945. Foreground
  5946. Background
  5947. Descriptor
  5948. key field
  5949.  (inactive)
  5950. dark blue
  5951. light grey
  5952. Descriptor
  5953. key field
  5954.  (active)
  5955. light grey
  5956. Data icon of 
  5957. primary key field
  5958. (s)    
  5959. black
  5960. pale yellow
  5961. Data icon of field linked to 
  5962. validation table
  5963. dark green
  5964. white 
  5965. Data icon of mandatory field
  5966. white
  5967. Clicking with SELECT on the 
  5968. descriptor
  5969.  and data icons within this window makes either the foreground or background (depending on the setting of the two radio buttons) cycle through the available colours. Clicking with ADJUST cycles through the colours in the opposite direction. 
  5970. The effect of the changes can be seen immediately and 
  5971. Save choices 
  5972. allows you to save them in the database as a file called 
  5973. Colours
  5974. . Different databases can have different colours. 
  5975. Defaults 
  5976. enables you to return the colours to what they were before by loading 
  5977. Powerbase
  5978. Colours
  5979.  file, but you can overwrite this too if you wish by selecting 
  5980. in Powerbase
  5981.  before clicking 
  5982. Save choices.
  5983.  The 
  5984. Close 
  5985. button merely closes the window.
  5986. Config
  5987.  files
  5988. Inside the 
  5989. Powerbase 
  5990. application directory is a sub-directory called 
  5991. Resources
  5992. The file 
  5993. Config
  5994. , which will be found there, determines certain aspects of the program
  5995. s operation which will seldom need changing. Changes made to 
  5996. Config
  5997.  take effect only when 
  5998. Powerbase
  5999.  is next loaded. Each attribute is identified by a token word and there is a comment line describing each.  The attributes in 
  6000. Config
  6001.  are as follows:
  6002. Fields 
  6003. Maximum number
  6004.  of fields per record (default = 100, maximum = 127)
  6005. Keys 
  6006. Maximum number
  6007.  of subsidiary indices (default = 10)
  6008. Tabs 
  6009. Maximum number
  6010.  of validation tables (default = 10)
  6011. Cols 
  6012. Maximum number
  6013.  of columns in a validation table (default = 20)
  6014. Scrolls
  6015.  Maximum number
  6016.  of scrollable lists (default=5)
  6017. BTime 
  6018. Number of seconds for which start-up banner (for a registered copy) is displayed (default = 2)
  6019. LeftOpen 
  6020. Whether submenus off the iconbar menu open on the left instead of on the right as normal.  This avoids the overlapping submenus which can occur but many users hate it!  (Default: NO)
  6021. BackGnd 
  6022. Background colour of record window.  Default=1 (pale grey). 
  6023. Upper 
  6024. Whether 
  6025. password
  6026.  entry is forced to uppercase. (Default: NO) 
  6027. DirOpts 
  6028. Display option for directories opened by buttons on the record window. Default is -si (small icons). This may be changed to -li or -fi (large icons and full information respectively). The options to sort by name, type, date and size (-sn, -st, -sd, -ss) may also be added after a space.
  6029. ExtFiles 
  6030. (default=NEW) 
  6031. Method used for storing Text, Sprite and Draw files which are linked to External fields. You should normally leave this set at the default (NEW). A description of the old and new methods is given below (
  6032. 14.6.1
  6033. Query 
  6034. Default query method. Default: SF (Search Formula), alternative: QBE (Query-By-Example).
  6035. PathLen 
  6036. Maximum pathlength for Remote filer objects (default 255; max. prior to RISC OS 4)
  6037. FontAdj 
  6038. Whether width of data fields takes account of desktop font (default: YES)
  6039. Multi 
  6040. Whether Powerbase multi-tasks when printing lists, indexing etc. (default: NO)
  6041. Multitasking
  6042. Markpane 
  6043. Whether pane for marking records for printing etc. appears attached to record window. (default: YES).
  6044. NameLen 
  6045. Maximum filename (i.e. leafname) length (default: 10). If you regularly use something like 
  6046. LongFiles
  6047. , or if you have RISC OS 4,
  6048.  you might want to increase this value but beware if you give someone one of your databases containing saved files with names longer than 10 characters!
  6049. ButtonAtts 
  6050. Attributes of Directory and Run file buttons when used on record window (see 
  6051. 4.2.11
  6052. ). The default (42) is the width in pixels (not OS units). The sprite will be vertically, as well as horizontally, centred on the button unless you add L to the number. If you do so then the leafname of the attached file or directory will appear on the button underneath the sprite.  You will probably need to make the button much wider to accommodate the leafname.
  6053. DialDelay 
  6054. Double-clicking with SELECT on a field containing a phone number whose tag or descriptor contains the string TEL (case insensitive) will attempt to produce 
  6055. dial-tones
  6056.  through the internal speaker. If you hold a telephone handset where it can 
  6057.  the tones the number will be dialled. This 
  6058. Config
  6059.  option allows you to specify the delay in second between the double-click and the tones. (Default=5)
  6060. TimeFirst
  6061. determines the interpretation of incomplete entries in Time fields (see 
  6062. 4.2.5
  6063. ) Default=H (hours first), alternative=S (seconds first)  
  6064. time entry, interpretation of
  6065. times, how displayed
  6066. FullTime
  6067.  Either always display as hh:mm:ss (default=YES) or allow mm:ss for times under 1 hour (NO)
  6068. Output
  6069.  If 1 (default) send output for 
  6070. Printer
  6071.  destination directly to printer. If 2 write first to file, then copy to printer. The latter may be needed to overcome problems with certain combinations of hardware and versions of 
  6072. !Printers. 
  6073. Config 
  6074. files for individual databases
  6075. Individual databases may be provided with their own 
  6076. Config
  6077.  files but 
  6078. Fields
  6079. BTime 
  6080. LeftOpen 
  6081. may only be set in 
  6082. Powerbase
  6083.  own 
  6084. Config
  6085.  file and will affect all databases. 
  6086. BackGnd 
  6087.  be set for an individual database but will affect only the background colours of field descriptors, not the window colour itself. Where choices are valid they override 
  6088. Powerbase
  6089. s own settings. 
  6090. Config files
  6091. 14.6.1 Pathnames for External file objects
  6092. External fields, pathnames of files
  6093. The OLD method of deriving the pathname for the stored file object  is as follows:
  6094. Divide the record number by 4900. The integer part of the result is used as the name of the top-level directory.
  6095. Divide the record number by 70. The integer part of the result is used as the name of the second-level directory.
  6096. The integer remainder of dividing the record number by 70 is used as the actual filename.
  6097. This is an awkward system if you are in the habit of using the filer windows to sift through the files rather than relying on 
  6098. Powerbase
  6099.  to display them. To calculate the number of the record to which the file belongs you have to take the number forming the name of the file
  6100. s parent directory, multiply by 70 and add the number corresponding to the filename itself.
  6101. The new system improves on this. Steps (a) and (b) are identical. The filename itself, however, uses the 
  6102. whole
  6103.  record number preceded by 
  6104. , e.g. a file associated with record 275 will be called 
  6105. Rec275
  6106. . You can therefore use the RISC OS filer
  6107.  command to locate and examine the file. Under the OLD system such a file would be called 
  6108. The default setting in 
  6109. Config 
  6110. is NEW.  Users should be aware that the earliest version of 
  6111. Powerbase 
  6112. to support this feature is 
  6113. v. 6.94
  6114. , dated 02-03-96.  This and later versions understand both methods of storage 
  6115. and will rename files according to the Config setting when a record is displayed
  6116. . Thus, a database created under an earlier version in which record 275 is represented by a file called 
  6117.  will have that file renamed to 
  6118. Rec275
  6119.  simply by displaying the 
  6120. record
  6121. , even if the file itself is not loaded.  Once this has happened the file cannot be found by an earlier version of 
  6122. Powerbase
  6123. .  Under most circumstances this should not cause any difficulty; just make sure you are using v. 6.94 or later.  Should you wish to run a database under an earlier version and access the External file objects from the record window you must first convert the filenames to the OLD format.  To do so place OLD in the 
  6124. Config 
  6125. file as described above, then load 
  6126. Powerbase
  6127. . Open your database and click on the 
  6128. Play 
  6129. button.  Click on 
  6130.  when all records have been displayed. If you use more than one subfile you will need to do this for each occupied subfile.  OLD may be converted to NEW pathnames in a similar way.
  6131. Messages
  6132.  file
  6133. This text file in the 
  6134. Resources 
  6135. sub-directory contains all the error and warning messages used by 
  6136. Powerbase
  6137.  including those for Acorn
  6138. s interactive 
  6139.  application. The wording may be altered if you wish.  Many error messages contain the string 
  6140.  and possibly 
  6141.  and 
  6142. .  Data items are substituted for these when the message is printed so don
  6143. t omit them or alter their logical placement within the message.
  6144. c    ~w7
  6145. B    ~ 7
  6146. Appendix A 
  6147. Powerbase 
  6148. as an 
  6149. Impulse 
  6150. server
  6151. The following is a description of the 
  6152. Impulse
  6153. methods
  6154.  understood by 
  6155. Powerbase
  6156. , given in the standard format recommended by Computer Concepts. Users wishing to write their own 
  6157. Impulse
  6158. tasks to communicate with 
  6159. Powerbase
  6160.  will need this information. They will also need details of the SWIs to which 
  6161. Impulse
  6162.  will respond, and this information is obtainable from Computer Concepts.    
  6163. {methods:
  6164. GetPathname 
  6165. Selection <string>
  6166. ParseQuery <string>
  6167. GetField <tag>
  6168. GetRecord
  6169. PutRecord
  6170. ExpandCode
  6171.  <string>
  6172. GetExpanded
  6173.  <string>
  6174. NextMatch
  6175. Description:
  6176. GetPathname
  6177.  specifies an 
  6178. object
  6179.  i.e. a 
  6180. Powerbase
  6181.  database. If 
  6182. Powerbase
  6183.  has the required database open it replies with the full pathname of the object, otherwise it returns an error message. Example of use:
  6184. :Powerbase !Elements GetPathname  (returns pathname of 
  6185. !Elements
  6186. R6 points to pathname when calling task is decoding reply.
  6187. Selection <string>
  6188.  tells 
  6189. Powerbase
  6190.  about a field, or group of fields, in which the caller is interested. The fields are specified as a list of 
  6191. , separated by any suitable character (e.g. 
  6192. ). The same separator must appear at the very end of the tag-list.  
  6193. Powerbase
  6194.  replies with the maximum data-length of the combined fields in the selection. Example of use: 
  6195. Selection 
  6196.  Impulse command
  6197.   :Powerbase Selection NAME/SYM/Z/
  6198. R6 points to a string which gives data-length.
  6199. ParseQuery
  6200.  <string>
  6201.  informs 
  6202. Powerbase
  6203.  of the criteria to be used in selecting records to transmit to the caller.  The parameter is a standard 
  6204. Powerbase
  6205. search formula
  6206.  and 
  6207. Powerbase
  6208.  replies with the title which would normally appear at the head of one of its printed lists. Example of use:
  6209. :Powerbase ParseQuery GP=T
  6210. R6 points to returned title.
  6211. GetField
  6212.  <tag>
  6213.  requests from 
  6214. Powerbase
  6215.  the data in the specified field of the next record which matches the preceding ParseQuery command.  When 
  6216. Powerbase
  6217.  replies to the GetField command the calling task should respond with an 
  6218. Impulse_
  6219. FetchData, specifying the address and length of the buffer to be used, and then wait for an 
  6220. Impulse
  6221. _Receive event (reason code &204) before reading the buffer.  Example of use:
  6222. :Powerbase GetField NAME
  6223. GetRecord
  6224.  [<key>]
  6225.  (The square brackets signify that the key is optional: they are not part of the command.) Sent without a key it requests from 
  6226. Powerbase
  6227.  the next record which matches the preceding ParseQuery command. If the 
  6228. primary key
  6229.  of a record in the database is appended then 
  6230. Powerbase
  6231.  will return the record corresponding to that key. The key must be separated from the GetRecord by a space. The calling task must follow the procedure described above for GetField.  
  6232. Powerbase
  6233.  will transmit the fields specified in the Selection command, using the same separator as was used in that command. Receipt of data may be followed by another GetRecord command, returning the next matching record and so on, a zero-length response signifying that there are no more matching records. If using 
  6234.  to request specific records you should end by sending *** as a key to tell 
  6235. Powerbase
  6236.  that the dialogue is finished.  This command and the one below operate only on Subfile 0 of the 
  6237. Powerbase
  6238.  database. Example of use:
  6239. :Powerbase GetRecord ACTI
  6240. PutRecord
  6241.  informs 
  6242. Powerbase
  6243.  that the caller wishes to write a record to the current 
  6244. Powerbase
  6245.  database. It should be sent as message type &200. A Selection command should have been previously sent to tell 
  6246. Powerbase
  6247.  what fields to expect and what separator is to be used. 
  6248. Powerbase
  6249.  will then reply with a GetRecord command (reason code &201) which the caller should acknowledge with message type &202, specifying the maximum length of the data which will be sent. Wait for event &203 which is a request by 
  6250. Powerbase
  6251.  for the caller to transmit the data. The caller should then do so with 
  6252. Impulse
  6253. _TransmitData, specifying the buffer address and the length of data being sent. This may be immediately followed by  another PutRecord.
  6254. ExpandCode
  6255.  <string>
  6256.  requests the expanded form of a code used in a field linked to a 
  6257. validation table
  6258. . The parameter string consists of the code itself, then a space, then the name of the 
  6259. validation table
  6260.  with the number of the linked column appended. Example of use:
  6261. :Powerbase ExpandCode T Group0
  6262. GetExpanded
  6263.  <string>
  6264.  combines the functions of GetField and ExpandCode, i.e. it requests the expanded form of the contents of a specified field. The parameter is the tag of the field. It is not necessary to supply the name of the validation table or number of the linked column since 
  6265. Powerbase
  6266.  can determine these from the entry in the 
  6267.  file linking the field to the table. By default the second column of the table (i.e. column 1) is used to supply the expanded string, but this may be overrridden by appending the relevant column number preceded by a comma as in the second example. Remember that the first column is numbered 0. Examples of use:
  6268. :Powerbase GetExpanded GP      :Powerbase GetExpanded GP,2    
  6269. NextMatch
  6270.  is designed to remove the restriction whereby only the data from a single record can be merged into a given document.  All it does is tell 
  6271. Powerbase
  6272.  to access the next record matching the 
  6273. search formula
  6274.  in the Merge window and interpret subsequent Merge commands by taking data from that record.
  6275. Appendix B 
  6276.  Keystroke equivalents
  6277. Only the function keys in the following list are re-assignable (see 
  6278. ); the Ctrl-letter keys are fixed.
  6279. Next record in subfile
  6280. Next record button
  6281. Fast forward (default: 10 records)
  6282. Shift 
  6283. Fast forward button
  6284. Final record in subfile
  6285. Final record button
  6286. Previous record in subfile
  6287. Previous record button
  6288. Fast rewind (default: 10 records)
  6289. Shift
  6290. Fast rewind button
  6291. Rewind button
  6292. First record in subfile
  6293. First record button
  6294. Force update
  6295. Select next subfile
  6296. Next subfile button
  6297. Select previous subfile
  6298. Previous subfile button
  6299. Rotate 
  6300. subfiles
  6301. Rotate subfiles button
  6302. Subfile rotation
  6303. Select next key
  6304. Shift
  6305. Next key button
  6306. Select previous key
  6307. Shift
  6308. Previous key button
  6309. Shift record forward
  6310. Shift forward button
  6311. Shift record backward
  6312. Shift back button
  6313. Delete 
  6314. record
  6315. Delete
  6316. button
  6317. Add new record
  6318. Add record button
  6319. Copy displayed record
  6320. Shift
  6321. Search  
  6322. for key in current subfile
  6323. Search button
  6324. Search for key in all 
  6325. subfiles
  6326. Shift
  6327. filter
  6328. Filter switch
  6329. List 
  6330. validation table
  6331.  for field with caret
  6332. Turn validation ON/OFF
  6333. Shift
  6334. Play (rapid scan of records)
  6335. Stop (cancel above)
  6336. Shift
  6337. List values
  6338. Show 
  6339. keypad
  6340. Print report
  6341. Print
  6342. Print 
  6343. displayed record
  6344. Shift
  6345. Print
  6346. Display Print Options window
  6347. Print
  6348. Select all fields for printing
  6349. Balance current index & display brief results
  6350. As above, but display compelete index tree
  6351. Shift  B
  6352. Copy field contents to 
  6353. clipboard
  6354. Enter current date 
  6355. Edit record template
  6356. Display list of fields, or of selected fields
  6357. Open 
  6358. Changes
  6359.  dialogue box for current field
  6360. Display 
  6361. Indices
  6362.  directory
  6363. Open 
  6364. Index
  6365.  dialogue box for current field
  6366. Show structure of currently-selected key
  6367. Open 
  6368.  dialogue box for current field
  6369. Toggle mark-pane ON/OFF
  6370. Open Numeric field calculations window
  6371. Retrieve last search formula
  6372. Display 
  6373. PrintJobs
  6374.  directory
  6375. Display 
  6376. ValTables
  6377.  directory
  6378. Display 
  6379. PrintRes
  6380.  directory
  6381. Choose field at which editing starts
  6382. Enter current time
  6383. Blank field
  6384. Paste field contents at caret
  6385. Restore keypad & record windows to initial state
  6386. Export CSV file
  6387. Clear field selection
  6388. Add new row to scrollable list (when in last cell)
  6389. Shift
  6390. Return
  6391. As above, but from any cell & without scrolling
  6392. Insert
  6393. Delete 
  6394. blank
  6395.  row from scollable list
  6396. Shift
  6397. Insert
  6398. Delete row with caret from scrollable list
  6399. Shift  Insert
  6400. Index
  6401. !BMARGIN 
  6402. !BODYFONT 
  6403. !CASE 
  6404. !CHANGE 
  6405. !CLEAR 
  6406. !COMMENT <string> 
  6407. !COPIES 
  6408. !CSV 
  6409. !DATE 
  6410. !DELETE 
  6411. !DESTINATION 
  6412. !EXCLUDE 
  6413. !EXPAND 
  6414. !FILTER
  6415. !FIRST 
  6416. !FONTSIZE 
  6417. !FORMAT 
  6418. !HEADER, !FOOTER 
  6419. !HEADERFONT 
  6420. !HEADINGS 
  6421. !IMPRESSION 
  6422. 55-56
  6423. !INCLUDE 
  6424. !INDEX
  6425. !INSERT 
  6426. !LABEL 
  6427. !LINESPACE 
  6428. !LMARGIN 
  6429. !MESSAGE
  6430. !MOVE 
  6431. !OBEY 
  6432. !ORIENTATION 
  6433. !PAGE 
  6434. !PMARGINS 
  6435. !PRINTOPTS 
  6436. !QUERY 
  6437. !RMARGIN 
  6438. !SAVE 
  6439. !SCRIPT 
  6440. !SELECTION 
  6441. !SHRINK 
  6442. !SORT 
  6443. !SPACER 
  6444. !STARTAT
  6445. !SUBFILES 
  6446. !TABLE 
  6447. !TEXTWIDTH 
  6448. !TITLE 
  6449. !TMARGIN 
  6450. !UPPER 
  6451. Access-control list 
  6452. Accumulating records in one subfile 
  6453. Add record
  6454.  button 
  6455. , 58, 65
  6456. Adding new records 
  6457. Allowed list in validation table
  6458. 36-39
  6459. Alphanumeric fields
  6460. Altering existing records 
  6461. Analysing Date fields by month 
  6462. Analysing indexed fields 
  6463. AND in search formulae 
  6464. AND, OR and NOT in Help window
  6465. Application shell, creating
  6466. Archives, unpacking 
  6467. Arithmetic in search and replace 
  6468. Arithmetic on report columns 
  6469. Arrow keys, action when editing 
  6470. Auto-balancing of indices
  6471. Average, calculation for numeric column
  6472. Balancing indices
  6473. Batch deletion and moving of records
  6474. Binary Large Objects (BLOBs)
  6475. Blanking records on deletion 
  6476. Bookmarks
  6477. , use of to mark place in file
  6478. Bounding box of field, moving and re-sizing 
  6479. Browsing
  6480. Button fields on record window 
  6481. Calculated fields 
  6482. 40-42
  6483. Calculation formulae 
  6484. Calculations, general discussion
  6485. Calculations involving dates 
  6486. Calculations involving times 
  6487. Calculations, making retrospective 
  6488. Case of letters and indexing 
  6489. Case 
  6490. switch (on Query panel)
  6491. 19, 26
  6492.  switch (on Preferences window)
  6493. Case-sensitive queries 
  6494. Changing keys 
  6495. Changing many records at once 
  6496. Changing size of database 
  6497. Changing subfile 
  6498. Check Boxes 
  6499. 18, 27, 
  6500. , 42, 47
  6501. Check boxes, 3-state 
  6502. Check boxes, appearance in reports 
  6503. Choosing which fields to print 
  6504. Clipboard, global
  6505. Clipboard, use of
  6506. Closing a database 
  6507. Collecting records in one subfile
  6508. Colours used to identify key fields 
  6509. 8, 61
  6510. Colour used to identify linked fields 
  6511. 37, 61
  6512. Colour used to identify mandatory fields
  6513. 33, 61
  6514. Colours window 
  6515. 8, 33, 37, 
  6516. Column calculations 
  6517. Column headings in reports
  6518. Column spacer 
  6519. Comma, literal, including in search formulae
  6520. Compacting sequence numbers
  6521. Comparators in search formulae 
  6522. 19-20
  6523. Comparators, list of
  6524. Comparison by numeric value, forcing
  6525. Composite fields 
  6526. Computed fields 
  6527. 18, 27, 31, 
  6528. 40-42
  6529. Concatenation of fields
  6530. Confidential data
  6531. 13-14
  6532. Config 
  6533. files, description of
  6534. 61-62
  6535. Config 
  6536. files for individual databases 
  6537. Copy 
  6538. Paste 
  6539. buttons
  6540. Copying a field to the clipboard 
  6541. Copying fields 
  6542. Counting matching records
  6543. Counting values in column
  6544. CSV data, truncation of 
  6545. CSV field separator 
  6546. CSV file, conversion to functioning database
  6547. CSV file, edits saved as 
  6548. CSV files 
  6549. 14, 28, 38, 
  6550. 44-48
  6551. , 51, 53, 57-58
  6552. CSV files, description of 
  6553. CSV files from scrollable lists
  6554. CSV files from validation tables 
  6555. CSV files, importing into scrollable lists
  6556. CSV files, importing into validation tables 
  6557. CSV header record 
  6558. CSV line terminator 
  6559. CSV options 
  6560. 44-45
  6561. , 47, 58-60
  6562. CSV options, importance of 
  6563. CSVoptions
  6564.  file
  6565. Data length for record field
  6566. 27-28
  6567. , 32, 50
  6568. Data length in scrollable lists 
  6569. Data Merge window 
  6570. Data overflow during CSV import
  6571. Data underflow during CSV import
  6572. Data-Merging with other applications 
  6573. 48, 60
  6574. Database 
  6575. 33, 43
  6576. Database 
  6577. file 
  6578. 7, 14, 31, 50, 59
  6579. Database size 
  6580. 33, 46, 
  6581. Database, adding new fields
  6582. Database, reformatting 
  6583. Database, renaming 
  6584. Database, shortening using subset 
  6585. Date fields
  6586. Date and time fields
  6587. Date separator 
  6588. Date stamp fields
  6589. Date stamp10 fields
  6590. Date stamp8 fields
  6591. Date stamp in  report header
  6592. Day-of-week stamp field
  6593. Default database, creating
  6594. 33, 27
  6595. Default print options file (
  6596. !PrintOpts
  6597. Default Query file (
  6598. !Query
  6599. Default selection file (
  6600. !Selection
  6601. Delete 
  6602. button 
  6603. 11, 65
  6604. Deleting a batch of records 
  6605. Deleting fields during record design
  6606. Deleting records 
  6607. Descriptors 
  6608. 27-29
  6609. , 43-44, 46, 50, 55, 59, 61
  6610. Dial-tones, generating from records
  6611. Directory 
  6612. button
  6613. Directory 
  6614. button, unlinking 
  6615. Disabling certain types of functionality 
  6616. 53, 58
  6617. Displayed record, exporting 
  6618. Displayed record, printing 
  6619. Doubled comparators in search formulae 
  6620. Draw files in external fields
  6621. 14, 30-31
  6622. Duplicate keys, warning of 
  6623. Duplicate primary keys, listing of
  6624. Duplicate primary keys, prohibiting
  6625. Editable fields 
  6626. 18, 27, 33
  6627. Editing scrollable lists 
  6628. Editing, choosing starting field 
  6629. 12, 60
  6630. Email address for Powerbase Support 
  6631. Empty database, building 
  6632. Exact match in table validation
  6633. 37, 38
  6634. Excluding individual records from reports
  6635. Exit 
  6636. button on record window
  6637. Expanding data using validation table
  6638. 25, 39
  6639. Expanding report headers 
  6640. ExpandCode (
  6641. Impulse
  6642.  command)
  6643. 63-64
  6644. Exporting data as CSV files
  6645. Exporting subsets of records
  6646. External fields 
  6647. 11, 14, 27, 
  6648. 30-31
  6649. , 46-47, 60
  6650. External fields, editing 
  6651. External fields, exporting 
  6652. External fields, linking files to 
  6653. External fields, pathnames of files 
  6654. External fields, unlinking 
  6655. 14, 31
  6656. External fields, warning of deletion from 
  6657. Extra button fields on record window
  6658. Fast forward
  6659.  button 
  6660. Fast forward
  6661.  interval 
  6662. Fast rewind
  6663.  button 
  6664. Field, meaning of
  6665. Field concatenation
  6666. Field creation in record design
  6667. Field Definition window 
  6668. 27-28, 50
  6669. Field selection for creating reports
  6670. Field separator in CSV files
  6671. Fields, copying 
  6672. Fields, making invisible and inaccessible 
  6673. Fields maximum number allowed
  6674. Fields, printable types
  6675. Fields, re-ordering 
  6676. File 
  6677. destination for reports
  6678. File (CSV), conversion to working database
  6679. Filters 
  6680. Filter 
  6681. switch 
  6682. Filetype &7f3, 
  6683.  for print 
  6684. election
  6685. Filetype &7f4, 
  6686.   for 
  6687. ueries
  6688. Filetype &7f5, 
  6689.  for 
  6690. rint options
  6691. Final record
  6692.  button 
  6693. First record
  6694.  button 
  6695. Fixed data on new records 
  6696. Flashing field, meaning of
  6697. Footers in reports 
  6698. 25, 42, 55
  6699. Force update
  6700.  button
  6701. , 37, 43, 60, 65
  6702. Form 
  6703. file 
  6704. 33, 50
  6705. Formats for reports 
  6706. Function keys 
  6707. 7, 53, 58
  6708. Function keys, assigning 
  6709. Function keys, disabling 
  6710. 53, 58
  6711. Function keys, storing strings in 
  6712. GetExpanded (
  6713. Impulse
  6714.  command)
  6715. 63-64
  6716. GetField (
  6717. Impulse
  6718.  command)
  6719. GetPathname (
  6720. Impulse
  6721.  command)
  6722. GetRecord (
  6723. Impulse
  6724.  command)
  6725. Global changes 
  6726. 12-13
  6727. Global clipboard, support for 
  6728. Grid for designing record layout
  6729. Hardware requirements to run 
  6730. Powerbase
  6731. Headers in reports
  6732. 25, 46, 55
  6733. Header record in CSV file
  6734.  application
  6735. Help available within Powerbase 
  6736. 6, 23
  6737. Help window for constructing search formulae
  6738. Helpreader 
  6739. text 
  6740. Hiding sensitive data 
  6741. Horizontal format for reports
  6742. 16-17
  6743. , 25, 55
  6744. Hyphen in search formulae 
  6745. I.D.s and personal passwords 
  6746. Iconbar menu 
  6747. Iconbar menu, disabling 
  6748. 53, 58
  6749. Importing data from CSV files
  6750. Importing data from plain text files 
  6751. Impression
  6752. , merging data into
  6753. 48-49
  6754. , 56, 60
  6755. Impulse 
  6756. commands
  6757. 48-49, 60,
  6758.  63-64
  6759. Including individual records 
  6760. Inclusive search 
  6761. Index, case-sensitive 
  6762. Index, analysing
  6763. Indexing a field 
  6764. Indices 
  6765. 7-9, 11, 25-27, 35, 
  6766. , 50-53, 59-60
  6767. Indices
  6768.  directory
  6769. Inserting fields when designing record
  6770. Installing 
  6771. Powerbase 
  6772. Internet 
  6773.  special field type
  6774. Invisible fields 
  6775. Key fields 
  6776. 7-10, 
  6777. 33-35
  6778. Key Structure 
  6779. 33-35
  6780. , 43, 50
  6781. Key structure of the currently-active index 
  6782. Key structure, examples 
  6783. 34-35
  6784. Key structure, multiple fields in 
  6785. Key, explanation of 
  6786. Key, inclusion in reports 
  6787. Keypad 
  6788. , 19, 32, 37-38, 43, 52-53, 58, 60, 65
  6789. Keypad buttons as record fields
  6790. Keypad, disabling 
  6791. 53, 58
  6792. Keys 
  6793. 7-9, 
  6794. 34-35
  6795. , 51, 53, 58, 63
  6796. Keys Maximum number 
  6797. Keystrokes 
  6798. 7, 58
  6799. Label format
  6800. Labels, including primary key 
  6801. Labels, number of lines printed 
  6802. Labels, substituting for blank field 
  6803. Labels, using up part sheets 
  6804. Last altered (stamp field)
  6805. Launch new copy 
  6806. Line spacing, for tables 
  6807. Line-spacing 
  6808. Linked fields 
  6809. Linking tables to fields 
  6810. List values
  6811.  button 
  6812. 10, 37-38, 65
  6813. Loading 
  6814. Powerbase 
  6815. Loading validation tables 
  6816. Logging changes 
  6817. Log file 
  6818. Logo fields
  6819. 31-32
  6820. Lookup function 
  6821. Mail-Merging
  6822. 48-49
  6823. Main menu, disabling 
  6824. 53, 58
  6825. Manager 
  6826. access rights 
  6827. Manager 
  6828. password 
  6829. Mandatory fields 
  6830. 10, 33
  6831. Mandatory fields, colouring of 
  6832. Margins in reports
  6833. 16, 25, 55
  6834. Marking records for printing etc.
  6835. Marking records with 
  6836. bookmarks
  6837. Match window 
  6838. 18-19,
  6839.  23-24, 32, 54
  6840. Matches found during key search, number of
  6841. Maximum value in column of numbers
  6842. Maximum value in numeric fields
  6843. Menu 
  6844. button on screen 
  6845. Menus 
  6846. directory for user menus
  6847. 27, 33
  6848. Merging databases 
  6849. Messages 
  6850. file 
  6851. Minimum value in numeric fields
  6852. Minimum value in column of numbers
  6853. Month of year stamp field
  6854. Months breakdown for Date fields
  6855. Moving a batch of records 
  6856. Multi-criterion searches 
  6857. Multiple subfiles, use of 
  6858. Multitasking within 
  6859. Powerbase
  6860. Naming subfiles 
  6861. New fields, adding to database 
  6862. New record format 
  6863. Next key
  6864.  button 
  6865. Next record
  6866.  button 
  6867. Next subfile
  6868.  button 
  6869. NextMatch (
  6870. Impulse
  6871.  command)
  6872. 63-64
  6873. NOT in search formulae 
  6874. Null keys in subsidiary indices 
  6875. Null tags, where permitted 
  6876. Numeric fields
  6877. 13, 25, 29, 35-36, 40-42
  6878. Numeric fields in search formulae 
  6879. Numeric fields, justification of 
  6880. Numeric min., start value for Sequence no
  6881. button on Query panel
  6882.  button on Search window
  6883.  button on Access window
  6884. Opening a database 
  6885. Options, CSV
  6886. Options, print
  6887. 16-17, 
  6888. 23-25
  6889. Order of fields in reports
  6890. OR in search formulae 
  6891. 19-20, 26
  6892. Output destination for reports
  6893. Ovation
  6894. , mail-merging with
  6895. 48-49
  6896. Page length in reports
  6897. Page numbers in reports 
  6898. ParseQuery (
  6899. Impulse
  6900.  command)
  6901. Password protection 
  6902. 6, 50, 
  6903. 52-53
  6904. , 58, 61
  6905. Paste 
  6906. from Clipboard 
  6907. Personal I.D.s and passwords 
  6908. Picture fields
  6909. 14, 30-31
  6910. Place in subfile, storing 
  6911. Play 
  6912. button 
  6913. Pop-up menu 
  6914. Powerbase, versions and compatibility 
  6915. Preferences 
  6916. 10, 38, 43, 51, 53, 
  6917. 59-60
  6918. Preferences window 
  6919. Previous key
  6920.  button 
  6921. Previous record
  6922.  button 
  6923. Previous subfile
  6924.  button 
  6925. Primary key 
  6926. , 11, 17, 27, 
  6927. 33-35
  6928. , 43, 47, 50-51, 53, 60-61, 63
  6929. Primary key index 
  6930. Primary key, defining structure 
  6931. PrimaryKey
  6932.  file
  6933. 33-35, 43, 50
  6934. Print 
  6935. button (on screen) 
  6936. Print destination
  6937. 16-17
  6938. , 23, 25, 54-56, 62
  6939. Print formats 
  6940. 16-18, 
  6941. 24-25
  6942. Print Options 
  6943. 16, 24, 26, 39, 44, 46, 58-59
  6944. Print options files 
  6945. Print options window, displaying 
  6946. 23-24
  6947. Print Resources 
  6948. Print selections 
  6949. Printable fields 
  6950. Printer 
  6951. destination 
  6952. Printing arbitrary selection of records 
  6953. Printing from a Report window 
  6954. Printing order of selected fields
  6955. Printing speed 
  6956. PrintJobs
  6957.  directory
  6958. 16, 27, 38, 45-46, 54, 57, 65
  6959. PrintRe
  6960. s directory
  6961. 18, 27, 65
  6962. PutRecord (
  6963. Impulse 
  6964. command)
  6965. 63-64
  6966. Query by example (QBE)
  6967. 22-23
  6968. Query by example, limitations of 
  6969. 22-23
  6970. Query file, default 
  6971. Query files 
  6972. Query panel 
  6973. , 23, 26, 45, 54, 57
  6974. Quit 
  6975. button on record window
  6976. Quitting Powerbase 
  6977. Quotation marks in CSV files 
  6978. RAM disc 
  6979. Random selection of records, printing
  6980. Re-ordering fields during record design
  6981. Read 
  6982. password 
  6983. Read/write 
  6984. password
  6985. Recalculate on opening 
  6986. Record edits as CSV file 
  6987. Record format, minor adjustments to 
  6988. Record layout, designing
  6989. Record numbers 
  6990. 7, 31
  6991. Record numbers, inclusion in reports 
  6992. Record, copying fields
  6993. Record, copying entire 
  6994. Record terminator in CSV file
  6995. , 45-46
  6996. Record window 
  6997. 7, 9-10, 14, 27-28, 30-32, 35, 39, 45-47, 49, 58, 60
  6998. Records, filtering 
  6999. Records, retrieving by key 
  7000. Records, retrieving by record number 
  7001. Records, retrieving via Report window 
  7002. Records, searching all subfiles for 
  7003. Records, searching for 
  7004. Related records, accessing 
  7005. Remote fields 
  7006. 30-31
  7007. Removing fields during record design 
  7008. Renaming a database
  7009. Re-ordering fields during record design 
  7010. Replace-on-entry (validation tables)
  7011. 37-38
  7012. Report printing 
  7013. 16, 53
  7014. Reporting, disabling 
  7015. Reports, formats for 
  7016. Resources 
  7017. Reverse order for reporting
  7018. Reverse 
  7019. switch on Query panel
  7020. Rewind 
  7021. button 
  7022. 8, 65
  7023. Rotate 
  7024. button 
  7025. 9, 65
  7026. Rotating subfiles
  7027. Run file
  7028.  button on record window
  7029. Run file
  7030.  button, unlinking 
  7031. Save box 
  7032. 16, 27, 38, 58
  7033. Saving from a Report window 
  7034. Saving a print selection
  7035. Saving a query for future use
  7036. 21-22
  7037. Saving print options
  7038. Script commands 
  7039. 54-56
  7040. Script files
  7041. 54-56
  7042. Script files, requesting user input from
  7043. Script language 
  7044. Scrollable list, adding rows 
  7045. Scrollable list, clearing 
  7046. Scrollable list, deleting rows 
  7047. Scrollable list, exporting from 
  7048. Scrollable list, importing to 
  7049. Scrollable lists 
  7050. 18, 24, 27, 29
  7051. Scrollable lists and CSV files 
  7052. Scrollable lists and validation tables 
  7053. Scrollable lists, editing 
  7054. Scrollable lists, maximum number of
  7055. Scrollable lists, printing format 
  7056. Scrollable lists, rows visible 
  7057. Scrollable lists, unequal columns in 
  7058. Scrollable lists, where to use 
  7059. Search all subfiles 
  7060. Search and replace 
  7061. Search 
  7062. button 
  7063. 9, 58, 65
  7064. Search element 
  7065. 19, 23
  7066. Search formula 
  7067. 10, 12-13, 
  7068. 18-23
  7069. , 25, 27, 45, 54, 57, 63-64
  7070. Search formulae and Help window 
  7071. Search window 
  7072. Searching for individual records
  7073. 9-10, 43
  7074. Searching by filter 
  7075. Selection (
  7076. Impulse 
  7077. command)
  7078. Self-calculating fields
  7079. 40, 42
  7080. Separator in CSV files
  7081. 44-45
  7082. Sequence number fields
  7083. Shift back
  7084.  button 
  7085. Shift forward
  7086.  button 
  7087. Shift record forward or backward 
  7088. Shrinking reports (removing white space)
  7089. 16, 25
  7090. Snap interval for record-design grid
  7091. Sorting
  7092. 16, 38, 43
  7093. Sorting a validation table
  7094. Sorting lines in a Report window 
  7095. Sorting, specifying before printing 
  7096. Spacer between columns of reports 
  7097. , 45, 55
  7098. Speeding up printing 
  7099. Sprite files in External fields
  7100. 14, 18, 
  7101. 30-31
  7102. Stamp fields
  7103. 18, 27, 
  7104. 31-32
  7105. Stamp fields, equivalent Computed types
  7106. 32, 40, 59
  7107. Standard deviation, calculation for column
  7108. Start editing at specified field
  7109. Stop 
  7110. button 
  7111. Strip leading and trailing spaces 
  7112. Subfile number, inclusion in reports 
  7113. Subfile rotation 
  7114. 9, 65
  7115. Subfiles 
  7116. 7, 9-10, 40, 50-51, 53, 60, 65
  7117. Subfiles, explanation of 
  7118. Subfiles, naming 
  7119. Subfiles, printing from several 
  7120. Subset database 
  7121. 19, 24, 51, 53, 
  7122. Subsidiary indices 
  7123. Subsidiary keys 
  7124. 7-8, 
  7125. Sum of numbers in report column
  7126. Swap with
  7127.  button (field definition window)
  7128. Table format for reports
  7129. , 25, 55
  7130. Tables, maximum number permitted
  7131. Tag list in search formula
  7132. Tags 
  7133. 19-20, 23, 27-28, 34, 40-41, 43-44, 46, 48, 50, 55, 63
  7134. Tags, importance of 
  7135. Target list in search formula
  7136. Template, use in data-entry 
  7137. Terminator in CSV files
  7138. 44-45
  7139. Text block 
  7140. 14, 17-18, 25, 28, 30-31, 46
  7141. Text 
  7142. button on record window
  7143. Text files in External fields
  7144. 14, 30-31
  7145. Text width in Vertical format 
  7146. 17, 25
  7147. Three-state check-boxes
  7148. 18, 30
  7149. TIME$ in user functions
  7150. 40-42
  7151. Time entry, interpretation of 
  7152. Time fields 
  7153. 29, 31, 41
  7154. Time fields, calculations on
  7155. Time fields, interpretation of input 
  7156. 29, 62
  7157. Time fields, separator in
  7158. Time for report creation
  7159. Time Stamp fields
  7160. 31-32
  7161. Times, how displayed 
  7162. Title on reports 
  7163. TooBig 
  7164. file and CSV import, explanation of
  7165. TSV files
  7166. Undo facilities
  7167. 11, 13, 38
  7168. Undoing mistakes 
  7169. Unlinking objects from External fields
  7170. Unlinked validation tables, how to load 
  7171. Unrestricted input fields
  7172. Upper case in reports
  7173. 25, 29
  7174. User functions 
  7175. 41-42
  7176. User menus, defining 
  7177. User menus, where stored
  7178. UserFuncs
  7179.  file
  7180. Using CSV files to modify existing records 
  7181. Using more than one subfile 
  7182. UsrSprites 
  7183. Validate input
  7184.  button (Preferences)
  7185. 59-60
  7186. Validation 
  7187. 10-12, 25, 36-39, 41, 43, 52, 55, 59-60, 64-65
  7188. Validation string in 
  7189. ValStrings
  7190.  file
  7191. Validation table, creating
  7192. Validation table data in printouts 
  7193. Validation table, displaying 
  7194. Validation table, saving contents as CSV file 
  7195. Validation tables, exact match with
  7196. Validation tables, loading unlinked 
  7197. Validation tables, replace on entry feature 
  7198. Validation, turning ON/OFF 
  7199. ValStrings 
  7200. ValTables 
  7201. directory
  7202. 27, 38-39, 65
  7203. Vertical format for reports
  7204. 17, 25, 55
  7205. Website for information & upgrades 
  7206. White space
  7207.  in reports, removing 
  7208. Wild cards in search formulae 
  7209. Wild cards in search-and-replace 
  7210. Wild-cards, characters used to represent
  7211. Window destination for reports 
  7212. Writable icons, copying between
  7213. Write 
  7214. password 
  7215. Year stamp field
  7216. Yes/No/Maybe fields
  7217. VLZ    X
  7218. Vp>    X
  7219. V@d    X
  7220. V`,    X
  7221. Vh*    X
  7222. V@2    X
  7223. V($    X
  7224. 1_Plain
  7225.